【发布时间】:2015-11-17 20:20:44
【问题描述】:
我有一堆模型类,都需要实现NSCoding 协议。它们都使用 ObjectMapper 框架,因此可以对 JSON 数据执行 NSCoding 位。
现在我想通用地执行此操作,但我似乎无法创建继承的映射器实例:Mapper<Mappable> --> Mapper<MyMappableModelClass>。
所以我需要做一个 hack 才能在超类中完成这一切。现在我的超类需要知道所有子类,这是非常糟糕的设计:
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 协议?
【问题讨论】:
标签: ios swift oop generics inheritance