Swift中的可选绑定语法

Swift中的可选绑定语法,swift,optional,Swift,Optional,不理解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(

不理解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!"
}
这两个版本不一样,是吗?如果不是,我想更好地了解它们是如何工作的。特别是:这两段代码之间有什么区别?

它们是不同的

对于
如果让y:Int?=someObject.someInt()
y
具有类型
Int?
,并且赋值始终成功,因此即使返回值为
nil

对于
如果让y=someObject.someInt()
y
首先被展开,并具有type
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
1>func-foo(a:Int?->Int?{返回a}
2> 如果让y=foo(nil){println(y)}//不能将`nil`赋值给Int
3> 如果设y=foo(1){println(y)}//y为Int
1.
4> 如果让y:Int?=foo(1){println(y)}//y是可选的
可选(1)
5> 如果让y:Int?=foo(nil){println(y)}//它仍然被执行,因为可以将`nil`赋值给`Int`
无

这很有道理。我有一个。另外:这意味着出错了,对吗?是的,那个教程确实出错了,虽然它会编译,但不会像那篇文章中描述的那样。