隐式解包可选值并使用其值(如果为nill)

时间:2015-12-10 10:40:45

标签: ios swift uitextfield

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,因为我在我的代码中使用了它的值,那么它应该返回错误,但它不会。为什么这样?

1 个答案:

答案 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。