为什么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)"
}
答案 0 :(得分:5)
因为它是可选绑定的工作原理。
name
只有在optionalName
不为空时才会被初始化并分配。
如果optionalName
为nil
,您将进入else
分支,并且您已经知道optionalName
为空。
来自官方书:
如果可选值为
nil
,则条件为false,并跳过大括号中的代码。否则,将打开可选值并将其分配给let
之后的常量,这使得在代码块中可以使用展开的值。
答案 1 :(得分:0)
如果可选名称不是nil,则名称仅定义为常量。如果可选名称为nil,为什么要将名称分配给该值?