- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我在 View 中创建一个标签(从对象库中拖拽)并制作IBOutlet来连接标签 和 viewController(Ctrl 和拖动),Xcode 生成的默认代码是,例如,@IBOutlet weak var displayColumn: UILabel!
我可以删除感叹号并将其设置为仅 UILable
。但是 Xcode 希望它成为强制解包的可选类型一定有充分的理由。
问题:我不明白为什么要在这里使用可选类型。因为我已经在我的 View 中创建了一个标签并将其连接到我的 Controller ,所以它就在那里,它存在,我创建了它。为什么 Xcode 想要一个选项作为默认类型?如果它说标签内的文本是一个选项,这对我来说听起来很合理,因为标签在运行时的某个时刻可能是空的。
非常感谢
最佳答案
您已经在 Xcode 中创建了一个标签,并向 Xcode 表明您希望该标签连接到 @IBOutlet
。但这种联系直到后来才发生。
这是运行时的事件顺序。
@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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!