Swift:必需的初始化程序给我一个错误消息

时间:2016-08-28 23:41:15

标签: ios swift

我有一个名为Alarm的类继承自NSObject,在其中,我有一个我遇到问题的属性,alarmLastTriggeredDate:

a={1: 'a', 2: 'b', 3: 'c', 4: 'd'}
c=[a[x] for x in set(a.keys()) & set([1,2,3])]
b=['a', 'b', 'c']

我是Swift的新手,不知道为什么我会收到以下错误:

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
        }
    }
}

似乎修复此问题的唯一方法是在两个地方初始化它,但这是冗余代码,似乎是错误的。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

编译器必须确保每个非可选属性都成功initialized

  • 在执行super init的调用之前
  • 在对象初始化完成之前
  • AND

这就是为什么你需要在机器人初始化器中填充alarmLastTriggeredDate的原因。

不,它不是冗余代码,因为有人可以使用2个初始化程序之一来创建Alarm对象。