gpt4 book ai didi

ios - 为什么标签的默认类型是强制展开的可选类型?

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:41 25 4
gpt4 key购买 nike

当我在 View 中创建一个标签(从对象库中拖拽)并制作IBOutlet来连接标签viewController(Ctrl 和拖动),Xcode 生成的默认代码是,例如,@IBOutlet weak var displayColumn: UILabel!

我可以删除感叹号并将其设置为仅 UILable。但是 Xcode 希望它成为强制解包的可选类型一定有充分的理由。

问题:我不明白为什么要在这里使用可选类型。因为我已经在我的 View 中创建了一个标签并将其连接到我的 Controller ,所以它就在那里,它存在,我创建了它。为什么 Xcode 想要一个选项作为默认类型?如果它说标签内的文本是一个选项,这对我来说听起来很合理,因为标签在运行时的某个时刻可能是空的。

非常感谢

最佳答案

您已经在 Xcode 中创建了一个标签,并向 Xcode 表明您希望该标签连接到 @IBOutlet。但这种联系直到后来才发生。

这是运行时的事件顺序。

  1. 创建(实例化)viewController。
  2. Storyboard或 .xib 未存档。标签是在此时创建的。
  3. @IBOutlet@IBAction是相连的。

在Swift中,当一个类被实例化时,所有的属性都必须被初始化。在第 1 步中, socket 为 nil,因为它们尚未连接。为了实现这一点,它们必须声明为Optionals

使用普通的可选是完全有效的,例如:

@IBOutlet weak var displayColumn: UILabel?

但是每次访问它时,您都必须处理解包问题。 @IBOutlet 唯一为 nil 的情况是第 3 步尚未发生时(例如,在 prepareForSegue 中)或者您忘记连接 socket 或重命名 socket .在这些情况下,访问 nil 导致的崩溃会提醒您注意问题。

关于ios - 为什么标签的默认类型是强制展开的可选类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38672995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com