学习过程中看到的示例代码:
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
我的想法:
代码不难理解,但是查找资料说 swift 中的 if 后面必须跟一个布尔型变量(或布尔表达式),资料如下
也就是说 name = optionalName;if name {}
是不正确的,不会将 name
变成 True
,而 if let name = optionalName
后面只是一个创建常量并赋值的操作,不太能理解如何得出来的 True
补充:
我知道上面代码的意思,这个不用解释,我只是奇怪这个不符合 if
的语法规范,因为 swift 中的 if 后面必须要一个布尔表达式或布尔型变量,不会隐形地和 0 作比较,而后面只是个创建常量并赋值的操作,为什么会根据有值/空值自动得出 True/False?
if let name = optionalName
这里 optionalName 是 String? ,但 name 就是 String 了。
如果 optionalName 有值,该值会被赋值给 name ,并进入 if 体 (if let 为真)
如果 optionalName 没有值,那么不会执行 if 体,或者进入 else (if let 为假)
要说语法规范,就得去看 swift 的 reference 了:
你看 condition 里是专门又一个 optional-binding-condition 的,用的就是 let 语法。
规范在 Optional Binding 里介绍了它的语义。
swift 这个 reference 现在写的质量还不够高。
现在 swift 应该还是在照着编译器写规范,而不是按照规范写编译器。也就是说,编译器具体实现就是规范。