是否可以在Swift中创建可选文字?

时间:2019-05-30 12:33:41

标签: objective-c swift optional

我已经在下面的代码段中解释了我的查询。我正在寻找用于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>

2 个答案:

答案 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>?