Swift通用的NSCoding方法

时间:2015-08-24 11:59:56

标签: ios swift oop generics inheritance

我有一堆模型类,它们都需要实现NSCoding协议。它们都使用ObjectMapper框架,因此可以在JSON数据中执行NSCoding位。

现在我想要通常这样做,但我似乎无法创建继承的映射器实例:Mapper<Mappable> --> Mapper<MyMappableModelClass>

所以我需要做一个黑客才能在超类中完成所有操作。现在我的超级班需要知道所有非常糟糕的子类:

func encodeWithCoder(aCoder: NSCoder) {
    var object: NSDictionary!

    switch self {
    case let u as User:
        object = Mapper<User>().toJSON(u)
    case let p as Profile:
        object = Mapper<Profile>().toJSON(p)
    // 
    // ...
    // 

    default:
        fatalError("Add your class to RestObject.swift")
    }

    aCoder.encodeObject(object, forKey: "json")
}

所以基本上如何在运行时创建Mapper<ChildClass>实例,而不必在每个模型类中实现NSCoding协议?

1 个答案:

答案 0 :(得分:0)

我们在这里遇到了同样的问题,试着让我们的解决方案进入relative ObjectMapper issue conversation