Ios 为什么标签的默认类型是强制展开的可选类型?
当我在视图中创建一个标签(从对象库拖动)并使IBOutlet连接标签和视图控制器(Ctrl和drag)时,Xcode生成的默认代码是,例如,Ios 为什么标签的默认类型是强制展开的可选类型?,ios,swift,xcode,uilabel,optional,Ios,Swift,Xcode,Uilabel,Optional,当我在视图中创建一个标签(从对象库拖动)并使IBOutlet连接标签和视图控制器(Ctrl和drag)时,Xcode生成的默认代码是,例如,@IBOutlet弱var displayColumn:UILabel 我可以删除感叹号并将其设置为仅可UILable。但是Xcode希望它是一个强制展开的可选类型,这肯定有一个很好的理由 问题:我想我不明白在这里使用可选类型的原因。因为我已经在我的视图中创建了一个标签,并将其连接到我的控制器,它就在那里,它存在,我创建了它。为什么Xcode需要一个选项作为
@IBOutlet弱var displayColumn:UILabel代码>
我可以删除感叹号并将其设置为仅可UILable
。但是Xcode希望它是一个强制展开的可选类型,这肯定有一个很好的理由
问题:我想我不明白在这里使用可选类型的原因。因为我已经在我的视图中创建了一个标签,并将其连接到我的控制器,它就在那里,它存在,我创建了它。为什么Xcode需要一个选项作为默认类型?如果它说标签内的文本是一个选项,我觉得这听起来很合理,因为标签在运行时的某个时候可能是空的
非常感谢您在Xcode中创建了一个标签,并向Xcode表示您希望该标签连接到该@IBOutlet
。但这种联系直到后来才发生
这是运行时事件的顺序
将创建(实例化)viewController
故事板或.xib未归档。此时将创建标签
已连接@IBOutlet
s和@IBAction
s
在Swift中,实例化类时,必须初始化所有属性。在步骤1中,插座为nil
,因为它们尚未连接。为了实现这一点,必须将其声明为可选
使用普通可选项是完全有效的,例如:
@IBOutlet weak var displayColumn: UILabel?
但是,每次访问它时,您都必须将其展开。@IBOutlet
唯一为零的时间是当步骤3尚未发生时(例如,在prepareForSegue
中),或者如果您忘记连接插座或将其重命名。在这些情况下,由于访问nil
而导致的崩溃会提醒您该问题。您已经在Xcode中创建了一个标签,并向Xcode指示您希望该标签连接到该@IBOutlet
。但这种联系直到后来才发生
这是运行时事件的顺序
将创建(实例化)viewController
故事板或.xib未归档。此时将创建标签
已连接@IBOutlet
s和@IBAction
s
在Swift中,实例化类时,必须初始化所有属性。在步骤1中,插座为nil
,因为它们尚未连接。为了实现这一点,必须将其声明为可选
使用普通可选项是完全有效的,例如:
@IBOutlet weak var displayColumn: UILabel?
但是,每次访问它时,您都必须将其展开。@IBOutlet
唯一为零的时间是当步骤3尚未发生时(例如,在prepareForSegue
中),或者如果您忘记连接插座或将其重命名。在这些情况下,由于访问nil
而导致的崩溃会提醒您这个问题。让您非常痛苦。解释得很好,清晰明了!太谢谢你了。解释得很好,清晰明了!