【问题标题】:Adding NSCoding as an Extension添加 NSCoding 作为扩展
【发布时间】:2014-09-02 20:21:20
【问题描述】:

我想扩展一个框架类(我不想直接编辑源代码),并使其符合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 表示扩展无法添加新的指定初始化程序。

我的英语不是很完美,也许我错过了什么……或者真的不可能吗?

【问题讨论】:

    标签: swift nscoding designated-initializer


    【解决方案1】:

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

    另外,init(coder aDecoder: NSCoder) 被指定为指定的初始化器,因为它是创建实例的完全不同的途径。以 UIViewController 为例,它可以使用纯代码创建,也可以从 XIB 文件创建。

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-28
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多