Swift:为什么未将IBoutlet分配(=)为其类型,而是仅将其强制展开类型(!)

问题描述 投票:0回答:1

我想知道为什么将像UILable类型的IBoutlet声明为:

@IBoutlet weak var theNameOfThelable: UILabel!

而不是:@IBoutlet weak var theNameOfThelable = UILabel()

如果我成功了,将会发生什么:

@IBoutlet weak var theNameOfThelable = UILabel()

swift iboutlet
1个回答
3
投票

在下面的代码中,

@IBoutlet weak var theNameOfThelable: UILabel!

上面的语句是隐式展开的可选。这意味着以后将不仅在init中分配其值。

此外,一旦在@IBOutlet之后和init之前,将插座连接到情节提要板,就会自动分配viewDidLoad()。>

另一方面,

@IBoutlet weak var theNameOfThelable = UILabel()

这里您正在为UILabel()分配一个全新的outlet实例。这将不会连接到storyboard

[在两种情况下,UILabel!UILabel()的分配都是不同的。您仍然可以访问UILabel的属性。只有在使用UILabel!之前没有连接它的情况下,应用程序才会引发运行时异常

© www.soinside.com 2019 - 2024. All rights reserved.