为什么标签的默认类型是强制展开的可选类型?
Why the default type of the label is a forced unwrapped optional?
当我在 view 中创建一个 label(从对象库中拖出)并制作 IBOutlet连接标签和viewController(Ctrl+拖动),默认代码由Xcode生成例如,@IBOutlet weak var displayColumn: UILabel!
我可以把感叹号删掉,只设置成UILable
。但是 Xcode 希望它成为强制展开的可选类型一定有充分的理由。
问题:我想我不明白为什么要在这里使用可选类型。因为我已经在我的视图中创建了一个标签并将其连接到我的控制器,所以它就在那里,它存在,我创建了它。为什么 Xcode 想要一个选项作为默认类型?如果它说标签内的文本是一个选项,这对我来说听起来很合理,因为标签可能在 运行 时间的某个时候是空的。
非常感谢
您在 Xcode 中创建了一个标签,并向 Xcode 表明您希望该标签连接到 @IBOutlet
。但这种联系直到后来才发生。
这是运行时的事件顺序。
- viewController 已创建(实例化)。
- 故事板或 .xib 未存档。此时创建标签。
@IBOutlet
和@IBAction
是相连的。
在Swift中,当实例化一个class时,必须初始化所有属性。在第 1 步中,网点为 nil
,因为它们尚未连接。为了允许这样做,它们必须声明为 Optionals.
使用正常的可选是完全有效的,例如:
@IBOutlet weak var displayColumn: UILabel?
但是每次访问它时,您都必须处理解包问题。 @IBOutlet
唯一为 nil 的情况是第 3 步尚未发生时(例如,在 prepareForSegue
中)或者您忘记连接插座或重命名插座。在这些情况下,访问 nil
导致的崩溃会提醒您注意问题。
当我在 view 中创建一个 label(从对象库中拖出)并制作 IBOutlet连接标签和viewController(Ctrl+拖动),默认代码由Xcode生成例如,@IBOutlet weak var displayColumn: UILabel!
我可以把感叹号删掉,只设置成UILable
。但是 Xcode 希望它成为强制展开的可选类型一定有充分的理由。
问题:我想我不明白为什么要在这里使用可选类型。因为我已经在我的视图中创建了一个标签并将其连接到我的控制器,所以它就在那里,它存在,我创建了它。为什么 Xcode 想要一个选项作为默认类型?如果它说标签内的文本是一个选项,这对我来说听起来很合理,因为标签可能在 运行 时间的某个时候是空的。
非常感谢
您在 Xcode 中创建了一个标签,并向 Xcode 表明您希望该标签连接到 @IBOutlet
。但这种联系直到后来才发生。
这是运行时的事件顺序。
- viewController 已创建(实例化)。
- 故事板或 .xib 未存档。此时创建标签。
@IBOutlet
和@IBAction
是相连的。
在Swift中,当实例化一个class时,必须初始化所有属性。在第 1 步中,网点为 nil
,因为它们尚未连接。为了允许这样做,它们必须声明为 Optionals.
使用正常的可选是完全有效的,例如:
@IBOutlet weak var displayColumn: UILabel?
但是每次访问它时,您都必须处理解包问题。 @IBOutlet
唯一为 nil 的情况是第 3 步尚未发生时(例如,在 prepareForSegue
中)或者您忘记连接插座或重命名插座。在这些情况下,访问 nil
导致的崩溃会提醒您注意问题。