Lieber Stackoverflowers,Swift ObjectMapper Typinferenz
Ich habe ein Hindernis in Bezug auf ObjectMapper verwenden, können so gleich auf den Punkt.
Ich speichere Modelle als temporären Datensatz in einer SQLite-Tabelle in JSON-Form. Jedes Modell verfügt über ein Feld Typ, das eindeutig angibt, welchem Modelltyp es zugeordnet ist.
Wenn beispielsweise die Modelle Hund, Katze, Maus dem Animal-Protokoll entsprechen, gibt es eine entsprechende AnimalType-Aufzählung (DogType, CatType, MouseType), die ebenfalls ein Feld in jedem der Modelle ist. Nach dem Speichern in der Datenbank habe ich Probleme, eine elegante Möglichkeit zu finden, den von der Datenbank geladenen JSON einer tatsächlichen Instanz einer Model-Klasse zuzuordnen.
Was ich gerade mache ist die Konvertierung der JSON über NSJSONSerialization in ein JSON-Wörterbuch und die Abfrage des Wörterbuchs für den Typ. Sobald der Typ gefunden ist, wechsle ich alle Typen durch, instanziiere ein verwandtes Mapper-Objekt und versuche, das Objekt zu deserialisieren. Ich denke, dies ist ein Brute-Force-Ansatz und dachte, es könnte eine bessere Möglichkeit geben, dieses Problem anzugehen.
Schlüssige:
Modelle: Hund, Katze, Maus (zum Tier konform, hat AnimalType Anforderung)
Aufzählungen: AnimalType (DogType, CatType, Mousetype)
Problem: Wie Sie ein Mapper-Objekt ermitteln und korrekt instanziieren, um das geladene JSON in ein Verzeichnis zu deserialisieren Instanz, abgesehen von der manuellen Überprüfung jedes Typs und der Instanziierung eines korrekten Mappers.
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
}