Уважаемые Stackoverflowers,
У меня есть проблемы с использованием ObjectMapper, так что давайте сразу к делу.
Я сохраняю модели как временную запись в таблице SQLite в формате JSON. У каждой модели есть поле «Тип», которое однозначно определяет, с каким типом модели она сопоставляется.
Например, если у нас есть модели Dog, Cat, Mouse, соответствующие протоколу Animal, существует эквивалентное перечисление AnimalType (DogType, CatType, MouseType), которое также является полем в каждой из моделей. После сохранения в базе данных у меня возникли проблемы с поиском элегантного способа сопоставления JSON, загруженного из базы данных, с фактическим экземпляром класса Model.
В настоящее время я преобразовываю JSON через NSJSONSerialization в словарь JSON и запрашиваю словарь для Type. Как только тип найден, я переключаюсь между всеми типами, создавая экземпляр связанного объекта Mapper и пытаясь десериализовать объект. Я чувствую, что это метод грубой силы, и подумал, что может быть лучший способ решить эту проблему.
Заключение:
Модели: собака, кошка, мышь (в соответствии с требованиями AnimalType)
Перечисления: AnimalType (DogType, CatType, MouseType)
Проблема: Как определить и правильно создать экземпляр объекта Mapper для десериализации загруженного JSON в экземпляр, кроме ручной проверки каждого Type и создания правильного экземпляра Mapper.
enum AnimalType {
case Dog
case Cat
case Mouse
}
protocol Animal {
var animalType: AnimalType { get }
}
struct Dog: Animal {
var animalType = AnimalType.Dog
}
struct Cat: Animal {
var animalType = AnimalType.Cat
}
struct Mouse: Animal {
var animalType = AnimalType.Mouse
}