ios - Swift:必需的初始值设定项给我一条错误消息

标签 ios swift

我有一个继承自 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/

相关文章:

ios - NSBundle mainBundle pathForResource : Not working unless @2x included

ios - 如何将 UIView 固定到屏幕底部?

objective-c - 如何从这个解析结果中单独获取日期和标题和描述

ios - 为什么从库中获取照片时 imagePickerController 会崩溃,但从相机中获取照片却可以正常工作

ios - 具有多个进度的 UIProgressView

iphone - 细节较少的 iOS MapKit

X代码/swift : how to add a bar with image at the top of view controller

swift - 在 Swift 中显示 AdMob 广告时场景发生变化

swift - 无法推断通用参数 'A'(从 Swift 2 迁移的 Swift 4、Bond 和 ReactiveKit 框架)

ios - 解析 : Xcode 6. 3.1 在 OS X El Capitan 上运行错误 "cannot load module parse as parse"