添加NSCoding作为扩展

时间:2014-09-02 20:21:20

标签: swift nscoding designated-initializer

我想扩展一个框架类(我不想直接编辑源代码),并使其符合NSCoding

基本上,这里简化了我所处的情况:

/* Can't be edited. */
class Car: NSObject {
    var color: String?
}

/* Can be edited */
extension Car: NSCoding {
    init(coder aDecoder: NSCoder) {
    }

    func encodeWithCoder(aCoder: NSCoder) {
    }
}

问题是init(coder aDecoder: NSCoder),根据标题文件,designated initializer不是这个奇怪的吗?不应该是{{1} }?)。但是,documentation表示扩展程序无法添加新的指定初始化程序。

我的英语并不完美,也许我错过了一些东西......或者它真的不可能?

1 个答案:

答案 0 :(得分:12)

与文档说的一样,扩展程序无法添加新的指定初始值设定项。如果有私有属性需要初始化怎么办?正确初始化类型是不可能的。您可以在扩展中添加便利初始值设定项,因为它们的性质必须调用指定的初始化程序。

此外,init(coder aDecoder:NSCoder)被指定为指定的初始值设定项,因为它是创建实例的完全不同的路径。以UIViewController为例,它可以使用普通代码创建,也可以从XIB文件创建。

最后,无法添加实现NSCoding的扩展名。

也许您可以创建一个包含此类的包装类,并让它实现NSCoding。