Apple文档说明以下关于隐式解包的可选项。
注意
如果隐式解包的可选项为nil并且您尝试访问它 包装值,您将触发运行时错误。结果是完全正确的 就像在正常可选项后放置感叹号一样 不包含值。
到目前为止,这么好。但是如果我们看到任何UI属性的引用都是隐式解包可选的。我一直这样做 -
private ObservableCollection<Artikel> _ArtikelAlle = new ObservableCollection<Artikel>();
public ObservableCollection<Artikel> ArtikelAlle
{
get { return _ArtikelAlle; }
set { _ArtikelAlle = value; SendPropertyChanged("ArtikelAlle"); }
}
现在如果用户没有在文本字段中输入任何内容,@IBOutlet weak var lbleemsx: UILabel!
@IBOutlet weak var nmtxtfld: UITextField!
override func viewDidLoad()
{
super.viewDidLoad()
lbleemsx.text = nmtxtfld!.text
}
的值为nil,因为我在我的代码中使用了它的值,那么它应该返回错误,但它不会。为什么这样?
答案 0 :(得分:1)
你有点困惑。在这种情况下,它是nmtxtfld
- UITextField实例,它是隐式解包的可选项。此属性不是因为在从NIB文件或故事板场景中实例化视图控制器时设置该属性。如果您刚刚在没有NIB或故事板的情况下分配了视图控制器的新实例,那么nmtxtfld
将为nil,当您尝试访问它时,您将获得运行时异常。
访问nmtxtfld.text
并没有给出运行时异常的原因是,正如其他人在评论和答案中解释的那样,当UITextField为空时,它是text
property isn&nt,这是一个空字符串""
text
属性是可选的,因此可以为零,但在这种情况下,您将其分配给text
的{{1}}属性,其UILabel
属性也是可选的,因此即使text
为零,分配也可以,因为您可以将nil分配给可选项。
如果nmtxtfld.text
为零并且您说了nmtxtfld.text
之类的内容,那么您将获得运行时异常,因为您已明确解开了nil。