添加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。