请检查此项,我需要解释为什么texField.text!
没有崩溃,label.text!
崩溃
如我们所知,UITextField
具有open var text:String?
的性质,UILabel
具有open var text:String?
的
let texField = UITextField()
texField.text = nil
print(texField.text!) // not crash
let label = UILabel()
label.text = nil
print(label.text!) //crash
来自UITextField
的文档
声明
var text: String? { get set }
讨论
默认情况下,此字符串为
@""
。
来自UILabel
的文档
声明
var text: String? { get set }
讨论
默认情况下,此属性为
nil
。
请注意的细微差异
根据经验,您永远不应该像这样强制打开可选值。您应该使用if-let
或guard
或swift提供的任何方式来安全地处理期权。
如果标签没有文本,则label.text
将返回nil。但是,如果文本字段没有文本,则textField
将返回""
(空字符串(。这就是为什么如果强制打开文本字段的text
属性,它不会崩溃。
我不知道苹果为什么会这样设计,但正如我在上面所写的,你应该安全地处理选项。