2015-08-24 2 views
3

У меня есть куча классов моделей, которые все должны реализовать протокол 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 в каждом одном из моих классов моделей ?

ответ

Смежные вопросы