DCM*_*xxx 16 nscoding designated-initializer swift
我想扩展一个框架类(我不想直接编辑源代码),并使其符合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) {
}
}
Run Code Online (Sandbox Code Playgroud)
问题是init(coder aDecoder: NSCoder)
,根据头文件,a designated initializer
(这不是很奇怪吗?不应该是convenience initializer
?).但是,文档说扩展无法添加新的指定初始化程序.
我的英语不完美,也许我错过了一些东西......或者它真的不可能?
dre*_*wag 13
与文档说的一样,扩展无法添加新的指定初始化程序.如果有私有属性需要初始化怎么办?正确初始化类型是不可能的.您可以在扩展中添加便利初始值设定项,因为它们的性质必须调用指定的初始值设定项.
此外,init(coder aDecoder:NSCoder)被指定为指定的初始值设定项,因为它是创建实例的完全不同的路径.以UIViewController为例,它可以使用普通代码创建,也可以从XIB文件创建.
最后,无法添加实现NSCoding的扩展.
也许您可以创建一个包含此类的包装类,并让它实现NSCoding.
归档时间: |
|
查看次数: |
1614 次 |
最近记录: |