我有一个继承自 NSObject 的名为 Alarm 的类,其中有一个我遇到问题的属性,alarmLastTriggeredDate:
class Alarm: NSObject {
var alarmLastTriggeredDate: NSDate
override init() {
super.init()
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(alarmLastTriggeredDate, forKey: "alarmLastTriggeredDate")
}
required init(coder aDecoder: NSCoder) {
if let alarmLastTriggeredDateDecoded = aDecoder.decodeObjectForKey("alarmLastTriggeredDate") as? NSDate
{
alarmLastTriggeredDate = alarmLastTriggeredDateDecoded
}
}
}
我是 Swift 的新手,不确定为什么会出现以下错误:
@override init: Property 'self.alarmLastTriggeredDate' not initialized at super.init call
@required init: Property 'self.alarmLastTriggeredDate' not initialized at implicitly generated super.init call
似乎解决这个问题的唯一方法是在两个地方都初始化它,但那是冗余代码,而且似乎是错误的。我错过了什么吗?
最佳答案
编译器必须确保每个非可选属性都成功 initialized :
- 在执行调用
super init
之前 - AND 在对象初始化完成之前
这就是为什么您需要在机器人初始化程序中填充 alarmLastTriggeredDate
。
不,这不是冗余代码,因为有人可以使用 2 个初始化程序之一来创建您的 Alarm
对象。
关于ios - Swift:必需的初始值设定项给我一条错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196789/