繁体   English   中英

使用可选问号赋值

[英]Assign value with optional question mark

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

var text: String? = nil

text? = "some text"

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

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

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

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

self.navigationController?.hidesBarsOnTap = true

意思是,如果self.navigationControllernil ,fuhgeddaboudit。 好吧,您的用例是一种变体,问号后没有任何内容。 大多数人不知道,如果链中的最后一个 object 是 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 = ,在现实生活中很常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM