【问题标题】:Assign value with optional question mark使用可选问号赋值
【发布时间】:2021-06-06 20:45:18
【问题描述】:

我目前正在从基础开始学习 Swift。现在我在选择选项,我正在尝试理解这种情况:

var text: String? = nil

text? = "some text"

如果我们用问号赋值会发生什么?我不明白为什么 text 的值是nil。你能解释一下分配text = "some text"text? = "some text"有什么区别吗?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您感到惊讶是对的。 text? = 表示“如果 textnil,则不要执行分配。”

    您偶然发现了一个非常晦涩难懂的语言功能。见https://ericasadun.com/2017/01/25/pretty-much-every-way-to-assign-optionals/ (正如她正确地说的,你可以指望零手的手指你会像这样说话的次数,因为只有在左值已经非零的情况下,谁会想要分配一个值?)

    注意我更喜欢将其视为可选链接的零长度变体。能够说例如是非常有用的。

    self.navigationController?.hidesBarsOnTap = true
    

    意思是,如果self.navigationControllernil,fuhgeddaboudit。好吧,您的用例是一种变体,问号后没有任何内容。大多数人不知道,如果链中的最后一个对象是 Optional,则链可以以问号结尾。 f 中的表达式都是合法的:

    class C {
        struct T {
            var text : String?
        }
        var t : T?
        func f() {
            self.t?.text = "howdy"
            self.t? = T()
            self.t?.text? = "howdy"
        }
    }
    

    但只有第一个,self.t?.text =,在现实生活中很常见。

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 2023-04-06
      • 2022-01-22
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2014-07-03
      • 2020-05-26
      • 1970-01-01
      相关资源
      最近更新 更多