无法在 NSCoding 协议方法中使用惰性变量

Could not use lazy variable inside NSCoding protocol methods

我 运行 遇到无法在 init?(coder aDecoder: NSCoder)

中使用惰性变量的问题

我的示例代码是

class Category: NSObject, NSCoding {
    var categoryID: NSInteger!
    var categoryName: String!
    var categoryLogoURL: String!
    lazy var categoryTags = [String]()
    private override init() {

    }

required init?(coder aDecoder: NSCoder) {
        self.categoryID = aDecoder.decodeInteger(forKey: "categoryID")
        self.categoryName = aDecoder.decodeObject(forKey: "categoryName") as! String
        self.categoryLogoURL = aDecoder.decodeObject(forKey: "categoryLogoURL") as! String
        self.categoryTags = aDecoder.decodeObject(forKey: "categoryTags") as! [String]
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.categoryID, forKey: "categoryID")
        aCoder.encode(categoryName, forKey: "categoryName")
        aCoder.encode(categoryLogoURL, forKey: "categoryLogoURL")
        aCoder.encode(categoryTags, forKey: "categoryTags")
    }
}

我遇到错误 Use of 'self' in property access 'categoryTags' before super.init initializes self

删除 lazy 后一切正常。我做错了什么?

调用超级初始化:

required init?(coder aDecoder: NSCoder) {
    super.init()
    self.categoryID = aDecoder.decodeInteger(forKey: "categoryID")
    self.categoryName = aDecoder.decodeObject(forKey: "categoryName") as! String
    self.categoryLogoURL = aDecoder.decodeObject(forKey: "categoryLogoURL") as! String
    self.categoryTags = aDecoder.decodeObject(forKey: "categoryTags") as! [String]
}