Swift中的可选绑定语法

时间:2014-10-02 21:19:41

标签: swift optional

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!"
}

这两个版本不一样,是吗?如果他们不是,我想更好地了解每个如何运作。特别是:这两段代码有什么区别?

1 个答案:

答案 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