在Swift中使用可选值

rga*_*ber 3 cocoa ios swift

在阅读The Swift Programming Language时,我遇到了这个片段:

您可以使用iflet一起使用可能缺少的值.这些值表示为选项.可选值包含值或包含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在这种情况下,确切的作用是什么?

我确实看过这个页面,但还是有点困惑.

Thi*_*ilo 8

if let name = optionalName {
   greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)

这有两件事:

  1. 它检查是否optionalName有值

  2. 如果是,则"解包"该值并将其分配给被调用的String name(仅在条件块内部可用).

请注意,类型nameString(不是String?).

如果没有let(即只有if optionalName),它只有在有值时才会进入块,但你必须手动/显式访问String optionalName!.