ios - 使用可选问号赋值
问题描述
我目前正在从基础开始学习 Swift。现在我在选择,我试图理解这种情况:
var text: String? = nil
text? = "some text"
如果我们用问号赋值会发生什么?我不明白为什么 text 的值是nil
. text = "some text"
你能解释一下 assignment和 和有什么区别text? = "some text"
吗?
解决方案
你感到惊讶是对的。text? =
意思是“如果text
不nil
执行任务”。
您偶然发现了一个非常晦涩的语言功能。请参阅https://ericasadun.com/2017/01/25/pretty-much-every-way-to-assign-optionals/ (正如她正确地说的那样,您可以数次指望零手的手指“真的会这样说话,因为只有在左值已经非零的情况下,谁才会想要分配一个值?)
注意我更喜欢将其视为可选链接的零长度变体。能够说例如是非常有用的
self.navigationController?.hidesBarsOnTap = true
意思是,如果self.navigationController
是nil
,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 =
,,,在现实生活中很常见。
推荐阅读
- tfs - TFS Work Item AssignedTo 下拉缺失项目
- r - 您如何在 tmap 中定位标题和图例?
- php - 为什么会话变量仅将最后一行数据发送到另一页
- sass - Nativescript 复合组件
- linux - 使用相同的目标和变量名调用 cmake target_link_libraries() 不会附加请求
- python - 生成器表达式如何在 python 内部工作?
- asp.net-core - Azure Devops UnitTest 未找到“.deps.json”文件
- sql - 更新 SQL 数据,但数据包含 ' 所以出现错误
- c# - 如何正确设置 ReadBarcodes
- javascript - 当我们调用 web api 函数时,javascript 是否会创建执行上下文?