如果我为变量a添加双问号而不是单个问号,有人能告诉我为什么Xcode的Playground会返回nil吗? 由于溢出结果必须是64,而不是零。
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()
答案 0 :(得分:3)
128溢出,因此存储为nil。
答案 1 :(得分:2)
这里有很多事情发生了:
a
溢出,因为128
大于可以存储在Int8
(Int8.max
= 127
)中的最大值,因此,它将返回nil
。
此nil
,即Optional.None
类型Optional<Int8>
不是类型注释a
指定的类型(Int8??
,又名{{1} }}),所以它包装在另一个可选项中,成为Optional<Optional<Int8>>
,现在是正确的类型。
Optional.Some(Optional.None)
不会返回任何内容。 (这实际上意味着它返回nilCoalescing()
,a.k.a。()
)
请勿明确Void
检查并强行展开(nil
):!
。请改为使用a != nil ? a! : b
:??
你到底想做什么?