在 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 不为空时才被初始化和分配。

如果optionalNamenil,你进入else 分支并且你已经知道optionalName 是空的。

来自官方书籍:

如果可选值为nil,则条件为假,并跳过大括号中的代码。否则,可选值被解包并分配给let 之后的常量,这使得解包后的值在代码块内可用。

【讨论】:

那么如果optionalName 为空,那么name 变量甚至不会被创建为nil 值? @Ossir 完全正确。我添加了官方书籍的引用,您可以在上面阅读。【参考方案2】:

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

【讨论】:

以上是关于在 if 语句中声明变量时使用未解析的标识符的主要内容,如果未能解决你的问题,请参考以下文章

使用未声明的类型“DKAsset”,使用未解析的标识符“DKImagePickerController”?

使用未声明的类型“JSON”和使用未解析的标识符“JSONEncoding”

“使用未声明的标识符‘PFLoginViewController’?--解析导入

XCode 使用未声明的标识符,仅在打开文件时出现

“使用未解析的标识符字符串“自定义键盘

C语言的关键字标识符基本数据类型