谁能告诉我为什么Xcode的操场返回nil,如果我把双问号而不是单问号变量a?由于溢出结果必须是64,而不是nil。
Swift版本2.2;Xcode版本7.3.1;OS X 10.11.6
import Cocoa
var b: Int8
var c: String? = "128"
var a: Int8?? = Int8(c!)
b = 64
func nilCoalescing() {
a != nil ? a! : b
}
nilCoalescing()
128在转换为Int8时溢出,因此存储为nil
这里有很多内容:
-
a
溢出,因为128
大于Int8
中可以存储的最大值(Int8.max
=127
),因此它将返回nil
。这个
nil
(又名Optional.None
)的类型是Optional<Int8>
,而不是a
(Int8??
,又名Optional<Optional<Int8>>
)的类型注释指定的类型,所以它被包装在另一个可选的类型中,成为Optional.Some(Optional.None)
,现在是正确的类型。 -
nilCoalescing()
没有返回任何东西。(这实际上意味着它返回()
,也就是Void
) -
不要做这个显式的
nil
检查和强制展开(!
):a != nil ? a! : b
。用??
代替:a ?? b
你到底想干什么?