请检查此内容,我需要解释为什么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
答案 0 :(得分:5)
声明
var text: String? { get set }
讨论
此字符串的默认值为
@""
。
根据UILabel
声明
var text: String? { get set }
讨论
此属性默认为
nil
。
请注意细微差别
答案 1 :(得分:1)
作为一般的拇指角色,您永远不要强行拆开这样的可选值。
您应该使用if-let
或guard
或swift提供的任何方式来安全地处理可选内容。
如果标签没有文本,则label.text
将返回nil。
但是,如果文本字段没有文本,则textField
将返回""
(空字符串)。这就是为什么如果您强制解开文本字段的text
属性,它不会崩溃的原因。
我不确定Apple为何要这样设计,但是正如我在上面所写的,您应该安全地处理可选项。