0

我在运行此代码时遇到了来自运行 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

在此处输入图像描述

4

4 回答 4

1

some就像optional在打印它们时添加到可选值中一样,它在 swift 4.1 中是新的

于 2018-05-10T21:35:45.327 回答
1

当您声明一个将其标记为未包装的变量时,意味着compiler会认为始终存在some值,而不是Optional意味着该值可以为 nil。

some表示总是有一个值,但还unwrapped没有。

于 2018-05-10T21:52:37.973 回答
0

let new: Int!是一个Optional<Int>,它恰好在任何Int预期使用它的地方被隐式解包。

print需要一个Any.... Optional<Int>就像是Any一样Int。没有理由进行隐式展开,所以它不是。

于 2018-05-10T21:51:19.937 回答
0

Optional 类型是具有两种情况的枚举。Optional.none 相当于 nil 文字。Optional.some(Wrapped) 存储一个包装的值。 参考。

有关可能有用的选项的其他信息(搜索隐式展开的选项)

于 2018-05-11T00:00:41.807 回答