在阅读The Swift Programming Language时,我遇到了这个片段:
您可以使用if和let一起使用可能缺少的值.这些值表示为选项.可选值包含值或包含nil以指示缺少值.在值的类型后面写一个问号(?)以将值标记为可选.
// Snippet #1
var optionalString: String? = "Hello"
optionalString == nil
// Snippet #2
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
Snippet#1足够清晰,但是在Snippet#2中发生了什么?有人可以分解并解释吗?它只是使用if - else块的替代方案吗?let在这种情况下,确切的作用是什么?
我确实看过这个页面,但还是有点困惑.
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
这有两件事:
它检查是否optionalName有值
如果是,则"解包"该值并将其分配给被调用的String name(仅在条件块内部可用).
请注意,类型name是String(不是String?).
如果没有let(即只有if optionalName),它只有在有值时才会进入块,但你必须手动/显式访问String optionalName!.