在 if 语句中声明变量时使用未解析的标识符
Posted
技术标签:
【中文标题】在 if 语句中声明变量时使用未解析的标识符【英文标题】:Use unresolved identifier when declaring variable in if-statement 【发布时间】:2014-06-04 10:49:11 【问题描述】:为什么在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)"
【问题讨论】:
【参考方案1】:因为这是可选绑定的工作原理。
name
仅在 optionalName
不为空时才被初始化和分配。
如果optionalName
是nil
,你进入else
分支并且你已经知道optionalName
是空的。
来自官方书籍:
如果可选值为
nil
,则条件为假,并跳过大括号中的代码。否则,可选值被解包并分配给let
之后的常量,这使得解包后的值在代码块内可用。
【讨论】:
那么如果optionalName
为空,那么name
变量甚至不会被创建为nil 值?
@Ossir 完全正确。我添加了官方书籍的引用,您可以在上面阅读。【参考方案2】:
仅当可选名称不为 nil 时,名称才被定义为常量。如果可选名称为 nil,为什么要将名称分配给该值?
【讨论】:
以上是关于在 if 语句中声明变量时使用未解析的标识符的主要内容,如果未能解决你的问题,请参考以下文章
使用未声明的类型“DKAsset”,使用未解析的标识符“DKImagePickerController”?
使用未声明的类型“JSON”和使用未解析的标识符“JSONEncoding”