У меня есть куча классов моделей, которые все должны реализовать протокол NSCoding
. Все они используют инфраструктуру ObjectMapper, поэтому бит NSCoding
можно выполнить с данными JSON и из него.Swift Общий подход к 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
в каждом одном из моих классов моделей ?