我目前正在从基础学习 Swift。现在我在选择选项,我试图理解这个案例:
var text: String? = nil
text? = "some text"
Run Code Online (Sandbox Code Playgroud)
如果我们用问号赋值会发生什么?我不明白为什么 text 的值是nil. 你能解释一下赋值text = "some text"和赋值的区别text? = "some text"吗?
你感到惊讶是对的。text? =意思是“如果text是nil则不执行任务”。
您偶然发现了一个非常晦涩的语言功能。请参阅https://ericasadun.com/2017/01/25/pretty-much-every-way-to-assign-options/ (正如她正确所说,你可以用零手的手指数出你的次数)实际上会这样说话,因为谁会只想在左值已经非零的情况下分配一个值?)
注意我更喜欢将其视为可选链的零长度变体。能够说例如
self.navigationController?.hidesBarsOnTap = true
Run Code Online (Sandbox Code Playgroud)
意思是,如果self.navigationController是nil,fuhgeddaboudit。嗯,您的用例是一种变体,问号后面没有任何内容。大多数人都没有意识到,如果链中的最后一个对象是可选的,那么链可能会以问号结尾。中的表达式f都是合法的:
class C {
struct T {
var text : String?
}
var t : T?
func f() {
self.t?.text = "howdy"
self.t? = T()
self.t?.text? = "howdy"
}
}
Run Code Online (Sandbox Code Playgroud)
但现实生活中只有第一个self.t?.text =说法是常见的。