在if语句中声明变量时使用未解析的标识符

Oss*_*sir 2 if-statement ios swift

为什么in then子句name被解析为变量,但是在else第I节中我得到错误:

Use unresolved identifier 'name'

代码:

    var optionalName: String? = "Peter"
    var greeting = "Hello!"
    if let name = optionalName {
        greeting = "Hello, \(name)"
    }
    else {
        greeting = "Hello, \(name)"
    }
Run Code Online (Sandbox Code Playgroud)

Gab*_*lla 5

因为它是可选绑定的工作方式.

name获取初始化并仅在optionalName不为空时分配.

如果optionalNamenil,你进入else分支,你已经知道它optionalName是空的.

从官方书籍:

如果是可选值nil,则条件为false,并跳过大括号中的代码.否则,将解包可选值并将其分配给常量let,这使得在代码块内可用的展开值可用.