【发布时间】:2018-12-16 02:14:13
【问题描述】:
在 Swift 中设置 UILabel 我可以执行以下操作
@IBOutlet var wLabel: UILabel!
或
@IBOutlet var wLabel: UILabel?
设置我可以做的文本
wLabel.text = "..."
或者,对于后者做
wLabel?.text = "..." // with a question mark for the optional
保持它们是可选的将有助于它们意外为零的情况,因为它会跳过此调用并继续执行代码。如果标签为 nil,则使用 ! 声明它们会使应用程序崩溃。
现在您为什么不将所有内容都设为可选?我能想到的唯一原因是为了更好的性能。如果我的应用程序有很多 UI 元素,那么我是否应该避免让它们成为可选元素,所以它们是可选的意味着性能方面的劣势?我无法在任何地方找到有关此的任何信息。
【问题讨论】:
-
它们都是可选的。没有性能差异。
-
“保持它们可选将有助于它们意外为零的情况” - 但如果意外为零,您希望它崩溃,因为这是开发过程中的编程错误。防止崩溃实际上并不能解决问题,它会隐藏它。
-
嗯,我可以想到一些情况,你希望某些东西继续运行,而不检查 nil。例如 2 个界面控制器,除了几个按钮外,它们的工作方式相同。您可以为它们使用相同的类,但您必须为任一类相应地调整您的代码。使用
?将让您无需任何修改即可继续操作 -
显然,如果组件真的是可选的,你就不会让它成为隐式展开的可选。
-
虽然,在这种情况下,创建两个控制器并将共享代码提取到超类是合理的。