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

Force unwrapping (UITextField().text!) Not Crash .But (UILabel().text!) Crash

请检查这个我需要解释为什么 texField.text! 没有崩溃和 label.text! 崩溃

我们知道 UITextField 有 属性 open var text:String?UILabelopen 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

的文档

Declaration

var text: String? { get set }

Discussion

This string is @"" by default.


来自 UILabel

的文档

Declaration

var text: String? { get set }

Discussion

This property is nil by default.

请注意细微差别

作为一般经验法则,您永远不应该像这样强制解包可选值。 您应该使用 if-letguard 或 swift 提供的任何方式来安全地处理可选值。

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

我不确定为什么 Apple 会这样设计,但正如我上面所写,您应该安全地处理可选值。