在赋值语句的左侧使用可选链接是什么意思?如果可选变量为nil,应用程序是否会崩溃?
e.g。
// cell is a UITableViewCell
cell.textLabel?.text = "Test"
答案 0 :(得分:4)
类似于短路&&
运算符,当它达到第一个假值时停止,可选链接将在达到第一个零值时停止。
因此,在像container?.cell?.textLabel?.text = "foo"
这样的极端情况下,容器,单元格或textLabel中的任何一个都可能为零。如果它们中的任何一个是,那么该声明实际上是无操作。只有当整个链条都是非零时才会发生分配。
答案 1 :(得分:3)
为了完整起见,除了@gregheo回答:
可以通过改变值本身或通过赋值给其中一个成员来修改可选链接表达式的展开值。如果optional-chaining表达式的值为
nil
,则不会对赋值运算符右侧的表达式求值。
答案 2 :(得分:1)
它只是作为一个可选项,您可以将其设置为字符串或零。它们都不会崩溃应用程序,除非你打开你的变量而不捕获它是否为零,当它为零时。 如果您链中的任何内容是可选的,那么您的整个链是(或至少在可选之后的所有内容)
答案 3 :(得分:0)
在 ES12 中,您可以使用逻辑空赋值来做到这一点
cell.textLabel?.text ??= "Test"
所以只有当左边的表达式不为空时才会发生赋值。
这就像你愿意
if (cell.textLabel?.text) cell.textLabel.text = "Test"