在 Swift 中设置 UILabel 我可以执行以下操作
@IBOutlet var wLabel: UILabel!
或
@IBOutlet var wLabel: UILabel?
设置文本我可以做
wLabel.text = "..."
或者,对于后者,做
wLabel?.text = "..." // with a question mark for the optional
将它们保持为可选将有助于它们意外为 nil 的情况,因为它会跳过此调用并继续执行代码。如果标签为 nil,则使用 !
声明它们会使应用程序崩溃。
现在为什么不把所有东西都设为可选的呢?我能想到的唯一原因是为了更好的表现。如果我的应用程序有很多 UI 元素,那么我是否应该避免让它们成为可选元素,因为它们是可选的意味着性能方面的劣势?我在这里找不到任何相关信息。
最佳答案
使用 ?在你的 Outlet 中会让你的代码无法追踪
在某些情况下,崩溃非常好,因为如果没有崩溃,那么即使是很小的错误也很难追踪。
考虑带有 !
的 @IBOutlet 示例:
@IBOutlet var wLabel: UILabel!
wLabel.isEnabled = true
只需从 Storyboard中删除 Outlet 标签的连接并运行该应用程序,您的应用程序就会在 wLabel.isEnabled = true
时崩溃。由于您遇到了崩溃,因此您可以进入 Storyboard查看连接是否正确。如果没有连接,你添加它,该死的!你轻松解决了这个问题。
现在考虑带有 ?
的 @IBOutlet 示例:
@IBOutlet var wLabel: UILabel?
wLabel?.isEnabled = true
做同样的事情,只需从 Storyboard中删除 Outlet 标签的连接并运行应用程序,您的应用程序根本不会崩溃。您将无法知道错误,从而使您的代码变得一团糟且无法追踪。
Apple 人员非常了解可选的东西,他们确实出于某种原因强制解包了@IBOutlet
。当然 !
和 ?
关于可选 UI 元素的快速性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794971/