强制展开 (UITextField().text!) 不崩溃。但是 (UILabel().text!) 崩溃
Force unwrapping (UITextField().text!) Not Crash .But (UILabel().text!) Crash
请检查这个我需要解释为什么 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
的文档
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-let
或 guard
或 swift 提供的任何方式来安全地处理可选值。
如果标签没有文本,则 label.text
将 return 为零。
但是,如果文本字段没有文本,则 textField
将 return ""
(空字符串)。这就是为什么如果您强制展开文本字段的 text
属性 它不会崩溃的原因。
我不确定为什么 Apple 会这样设计,但正如我上面所写,您应该安全地处理可选值。
请检查这个我需要解释为什么 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
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-let
或 guard
或 swift 提供的任何方式来安全地处理可选值。
如果标签没有文本,则 label.text
将 return 为零。
但是,如果文本字段没有文本,则 textField
将 return ""
(空字符串)。这就是为什么如果您强制展开文本字段的 text
属性 它不会崩溃的原因。
我不确定为什么 Apple 会这样设计,但正如我上面所写,您应该安全地处理可选值。