我已经在下面的代码段中解释了我的查询。我正在寻找用于Obj-C互操作性的这种语法。具体来说,当计数为Int(非可选)与Int?时,我发现aCoder.encode(count, forKey: "count")
API的行为有所不同。 (可选)
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隐式地键入可选内容?
// 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>
答案 0 :(得分:2)
Optional
是普通的enum
,不是任何特定的魔术类型。因此,您可以使用Optional
创建一个值:
let implicitOptional = Optional(5)
print(type(of: implicitOptional)) // Optional<Int>
答案 1 :(得分:1)
我不知道你为什么需要这个,但是你可以这样做
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>?