我在运行此代码时遇到了来自运行 swift 4.1 的 xcode 9.3 的奇怪响应:
let old = "not an int"
let new: Int! = Int(old) ?? 2
print(new)
print(new!)
响应是some(2)
和2
(强制展开)(检查下图)。
这是some
从哪里来的?(请解释或提供参考以了解更多信息some
)
我在运行此代码时遇到了来自运行 swift 4.1 的 xcode 9.3 的奇怪响应:
let old = "not an int"
let new: Int! = Int(old) ?? 2
print(new)
print(new!)
响应是some(2)
和2
(强制展开)(检查下图)。
这是some
从哪里来的?(请解释或提供参考以了解更多信息some
)
some
就像optional
在打印它们时添加到可选值中一样,它在 swift 4.1 中是新的
当您声明一个将其标记为未包装的变量时,意味着compiler
会认为始终存在some
值,而不是Optional
意味着该值可以为 nil。
some
表示总是有一个值,但还unwrapped
没有。
let new: Int!
是一个Optional<Int>
,它恰好在任何Int
预期使用它的地方被隐式解包。
print
需要一个Any...
. Optional<Int>
就像是Any
一样Int
。没有理由进行隐式展开,所以它不是。
Optional 类型是具有两种情况的枚举。Optional.none 相当于 nil 文字。Optional.some(Wrapped) 存储一个包装的值。 参考。
有关可能有用的选项的其他信息(搜索隐式展开的选项)