tutorial on found I've found helpful un了解Swift的可选类型包含(“Unwrapping”部分中的最后一个示例)以下示例:
if let y: Int? = someObject.someInt() {
println(double(y))
} else {
println("No value to double!") // prints "No value to double!"
}
但这似乎没有按预期工作。这里的意图不是更像
if let y = someObject.someInt() {
println(double(y))
} else {
println("No value to double!") // prints "No value to double!"
}
这两个版本不一样,是吗?如果他们不是,我想更好地了解每个如何运作。特别是:这两段代码有什么区别?
答案 0 :(得分:3)
他们是不同的。
对于if let y: Int? = someObject.someInt()
,y
的类型为Int?
,并且赋值始终成功,因此即使返回值为nil
,它也始终执行第一个块而不是else块
if let y = someObject.someInt()
,y
首先展开,类型为Int
1> func foo(a:Int?) -> Int? { return a }
2> if let y = foo(nil) { println(y) } // can't assign `nil` to Int
3> if let y = foo(1) { println(y) } // y is Int
1
4> if let y : Int? = foo(1) { println(y) } // y is Optional<Int>
Optional(1)
5> if let y : Int? = foo(nil) { println(y) } // it is still executed because it is ok to assign `nil` to `Int?`
nil