Ios 强制展开(UITextField().text!)不会崩溃,但(UILabel().text!)会崩溃
请检查此项,我需要解释为什么Ios 强制展开(UITextField().text!)不会崩溃,但(UILabel().text!)会崩溃,ios,swift,string,uitextfield,uilabel,Ios,Swift,String,Uitextfield,Uilabel,请检查此项,我需要解释为什么texField.text不崩溃和label.text崩溃 正如我们所知,UITextFieldhas属性open-var-text:String?和UILabelhaveopen-var-text:String? let texField = UITextField() texField.text = nil print(texField.text!) // not crash let label = UILabel() label.tex
texField.text代码>不崩溃和label.text代码>崩溃
正如我们所知,UITextField
has属性open-var-text:String?
和UILabel
haveopen-var-text:String?
let texField = UITextField()
texField.text = nil
print(texField.text!) // not crash
let label = UILabel()
label.text = nil
print(label.text!) //crash
根据
声明
var文本:字符串?{get set}
讨论
默认情况下,此字符串为@“
根据
声明
var文本:字符串?{get set}
讨论
默认情况下,此属性为nil
请注意细微的差别作为一般的经验法则,您不应该像这样强制展开可选值。
如果让
或
保护或swift提供的任何方式安全处理期权,则应使用
如果标签没有文本,则label.text
将返回nil。
但是,如果文本字段没有文本,则textField
将返回”
(空字符串)。这就是为什么如果强制展开文本字段的text
属性,它不会崩溃
我不知道苹果为什么会这样设计,但正如我在上面写的,你应该安全地处理optionals。谢谢@vadian。是的,我知道,因此UITextField文本是可选的,具有空值“”,当强制展开时,您将获得“”,但UILabel文本是可选的,没有值,当强制展开时,它将崩溃,似乎UITextField
行为是由某些Objective-C兼容性引起的。但是,尽管它是可选的,但它不会是nil
在@中的@是什么意思?@Jim这是Objective-C语义。文字字符串必须用@
前缀标记。是的@abullah我知道,但我这样写是想问区别,无论如何谢谢