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
have
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 

根据

声明

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我知道,但我这样写是想问区别,无论如何谢谢