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

时间:2014-06-04 10:49:12

标签: ios if-statement swift

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

Use unresolved identifier 'name'

代码:

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

2 个答案:

答案 0 :(得分:5)

因为它是可选绑定的工作原理。

name只有在optionalName不为空时才会被初始化并分配。

如果optionalNamenil,您将进入else分支,并且您已经知道optionalName为空。

来自官方书:

  

如果可选值为nil,则条件为false,并跳过大括号中的代码。否则,将打开可选值并将其分配给let之后的常量,这使得在代码块中可以使用展开的值。

答案 1 :(得分:0)

如果可选名称不是nil,则名称仅定义为常量。如果可选名称为nil,为什么要将名称分配给该值?