问题描述
每当我在ViewController类中创建任何对象时上网或在线检查项目时,在数据类型末尾都会出现一个感叹号(!),这是为什么呢?例如:@IBOutlet弱var标签:UILabel! 那为什么是'!'标记或为什么我们要强制展开它? 而且,当我删除它时,它给出了一个错误,我们也可以这样写@IBOutlet弱var Label = UILabel() 那我们为什么不使用它呢?
解决方法
您需要逐步了解事物以获得答案。
- @IBOutlet:这是一个属性包装程序,它告诉Xcode将故事板上的元素与
.swift
文件中的元素相连。 -
!
标记:推荐使用这种强制拆包的方法,因为当.swift
文件需要实例时,一定会在情节提要中找到连接的元素。我们也可以写@IBOutlet弱var标签:UILabel?在这种情况下,实例Label
是可选的。 - @IBOutlet弱var Label = UILabel():在这种情况下,实例
Label's
的值在初始化后立即被UILabel()
覆盖。@IBOutlet weak var Label!
之后的Label
和Label = UILabel()
是不同的实例。
@IBOutlet weak var label: UILabel
等同于编写var label: UILabel
。因此,i-val没有初始值,Swift不允许这样做。在Swift中,您必须为变量分配一个值,或者使其成为可选值/展开后才能显式处理nil值。而且,当您用@IBOutlet
解开实例时,以后可以像?
一样将它与label?.text = "Some text"
一起使用。
因此,我们被迫使用!
或?
作为出口,以像其他变量声明中那样显式地使变量成为可选变量。而且我们在声明后不使用= UILabel()
,因为它会覆盖从情节提要中创建的实例(已通过笔尖中的NSCoder/Coder
初始化)。