【问题标题】:Use unresolved identifier when declaring variable in if-statement在 if 语句中声明变量时使用未解析的标识符
【发布时间】: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)"
    }

【问题讨论】:

    标签: ios if-statement swift


    【解决方案1】:

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

    name 仅在 optionalName 不为空时才被初始化和分配。

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

    来自官方书籍:

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      相关资源
      最近更新 更多