斯威夫特:!而不是= nil

时间:2014-10-30 18:14:01

标签: swift

我最近接手了Swift,以了解如何编写iOS应用程序。我一直在关注Skip Wilson的教程,并且在他连接插座时得到了:

@IBOutlet var ticTacImg1: UIImageView = nil

而不是让我获得:

@IBOutlet var ticTacImg1: UIImageView! 

如果我尝试更改它,Xcode会告诉我这是一个错误。我做错了什么?

2 个答案:

答案 0 :(得分:3)

在Xcode 6的早期版本中,任何标记为@IBOutlet的内容都会变成弱隐式展开的可选内容。

那是

@IBOutlet var ticTacImg1: UIImageView = nil

将编译为

@IBOutlet weak var ticTacImg1: UIImageView! = nil

这已不再适用。现在您必须声明其可选状态,但它仍然很弱。

那是

@IBOutlet var ticTacImg1: UIImageView! = nil

将编译为

@IBOutlet weak var ticTacImg1: UIImageView! = nil

ticTacImg1未初始化为nil的原因是无关紧要。在Swift中,未初始化的隐式解包选项具有值nil,因此= nil是多余的。

答案 1 :(得分:1)

@IBOutlet var ticTacImg1: UIImageView!是正确的代码。

@IBOutlet属性必须是可选的,因为它在系统将视图连接到它之前最初具有nil值。使用!将其标记为隐式展开的可选项意味着它将在使用时自动解包。

我不确定你引用了哪个具体的教程,但我最初的想法是他可能正在使用Xcode 6的早期测试版,并没有强制执行此操作。