一个tutorial on found I've found helpful不理解 Swift 的可选类型包含(“展开”部分中的最后一个示例)以下示例:
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!"
}
这两个版本不一样,是吗?如果不是,我想更好地了解每种方法的工作原理。特别是:这两段代码有什么区别?
最佳答案
它们是不同的。
for if let y: Int? = someObject.someInt()
, y
的类型为 Int?
,并且赋值总是成功,因此它总是执行第一个 block 而不是 else block ,即使当返回值为nil
对于 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
关于swift - Swift 中的可选绑定(bind)语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169828/