添加NSCoding作为扩展

问题描述:

我想扩展框架类(我不想直接编辑源代码),并使其符合NSCoding添加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不是这个奇怪的,虽然不应该它是一个convenience initializer)。但是,documentation表示扩展名不能添加新的指定初始值设定项。

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

就像文档说的那样,扩展名不能添加新的指定初始值设定项。如果有需要初始化的私有属性呢?这将不可能正确地初始化类型。您可以在扩展中添加便利初始值设定项,因为它们的性质必须调用指定的初始值设定项。

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

最后,不可能添加实现NSCoding的扩展。

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