【发布时间】:2014-07-26 00:52:42
【问题描述】:
var z1 = false
var z2 = false
var z3 = false
if let y1: Int = nil {
z1 = true
}
if let y2: Int? = nil {
z2 = true
}
var x: Int? = nil
if let y3: Int? = x {
z3 = true
}
println(z1) // false
println(z2) // ture
println(z3) // false
我尝试使用这样的可选值(我知道这很奇怪,我只是对深度的可选值感到好奇)。
结果并不如我所料。 z1 是假的,这正如我所料,但为什么 z2 是真的?
赋值后 y2 为 nil,但是 if 语句认为这个表达式(let y2: Int? = nil)为真,执行下一条语句(z2=true),为什么会这样?
为什么 z2 不为假?
如果 y2 只是声明为一个可选值,可以包含另一个可选值,而可选值可能是 nil,if let 语句只是检测到 unwrap 是否成功,那么,为什么 z3 不正确?
【问题讨论】: