Можно ли создать необязательный литерал в Swift? - PullRequest
0 голосов
/ 30 мая 2019

Я объяснил свой запрос в фрагменте кода ниже.Я ищу этот тип синтаксиса для совместимости Obj-C.В частности, я вижу разницу в поведении aCoder.encode(count, forKey: "count") API, когда счетчик Int (не обязательно) против Int?(необязательно)

import Foundation

let num = 5
// Swift's type system will infer this as Int (non-optional)
print(type(of: num))
// Prints: Int

let optNum: Int? = 5
// This is explicitly typed as an optional Int
print(type(of: optNum))
// Prints Optional<Int>

Можно ли использовать литерал для неявного ввода var / let в значение option? *

// let imlicitOptional = 5?
// print(type(of: imlicitOptional))
// The above line should print: Optional<Int>

// or

// let imlicitOptional = num?
// print(type(of: imlicitOptional))
// The above line should print: Optional<Int>

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Optional - это обычный enum, а не какой-либо конкретный тип магии. Таким образом, вы можете создать значение, используя Optional:

let implicitOptional = Optional(5)
print(type(of: implicitOptional)) // Optional<Int>
1 голос
/ 30 мая 2019

Я не знаю, зачем вам это нужно, но вы можете сделать это

let opt = 5 as Int?
// or
let opt = Optional(5)
// or
let opt = 5 as Optional // thanks to vacawama for this

На самом деле вы даже можете создать оператор, который возвращает необязательный аргумент, но я думаю, что это несколько бесполезно.

postfix operator >?
postfix func >?<T>(value: T) -> T? {
    return Optional(value) // or return value as T?
}

let a = 5>?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...