强制展开(UITextField()。text!)不崩溃。但是(UILabel()。text!)崩溃

时间:2018-12-01 16:00:28

标签: ios swift string uitextfield uilabel

请检查此内容,我需要解释为什么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 

2 个答案:

答案 0 :(得分:5)

根据UITextField

的文档
  

声明

     

var text: String? { get set }

     

讨论

     

此字符串的默认值为@""


根据UILabel

的文档
  

声明

     

var text: String? { get set }

     

讨论

     

此属性默认为nil

请注意细微差别

答案 1 :(得分:1)

作为一般的拇指角色,您永远不要强行拆开这样的可选值。 您应该使用if-letguard或swift提供的任何方式来安全地处理可选内容。

如果标签没有文本,则label.text将返回nil。 但是,如果文本字段没有文本,则textField将返回""(空字符串)。这就是为什么如果您强制解开文本字段的text属性,它不会崩溃的原因。

我不确定Apple为何要这样设计,但是正如我在上面所写的,您应该安全地处理可选项。