2016-07-04 19 views
2

Ich bin neu in Swift und ich muss eine Objektstruktur in einen JSON-String in meinem iOS (iOS> = 8) -Projekt serialisieren. Also entschied ich mich, die ObjectMapper-Bibliothek zu verwenden (ich habe sie in Cocoapod integriert).Wie Vererbung mit Swift und ObjectMapper verwenden?

Aber mein Problem ist, dass die Struktur folgende ist.

ObjectA kann eine Liste von untergeordneten Objekten als ein in einer Instanzvariable gespeichertes Array enthalten. Objekte, die im Instanz-Array gespeichert werden können, können mehrere Typen haben, z. B. ObjectB und ObjectC. Also, in Java mit GSON hätte ich ein InterfaceD erstellt und beide Klassen implementiert und das Array in den InterfaceD-Typen des ObjectA-Speichers erstellt, aber ich kann mir nicht vorstellen, wie dies mit dem Swift-Objektmodell funktioniert, da es leer {} ergibt JSON-Objekte.

Der resultierende JSON sollte so aussehen.

{"children":[ 
    {"type":"ObjectB", "value1":"foo"}, 
    {"type":"ObjectC", "value1":"bar", "value2":"baz"} 
]} 

und ich

{"children":[ 
    {}, 
    {} 
]} 

Beachten Sie, dass die beiden Einträge, die von Objecta und ObjectC serialisiert werden müssen, sollten unterschiedliche Strukturen aufweisen.

Ich versuchte mehrere Dinge, aber jedes Mal steckte ich in einer Sackgasse. Ich versuchte mit Generics, versucht, Mappable-Protokoll als meine Array-Typ zu verwenden, versuchte ich klassische Klassenerben aber jeder Fehler.

Haben Sie eine Idee, wie ich das erreichen kann?

Beachten Sie, dass ich weiß, dass ich jedem Objekt eine Serialisierungsfunktion hinzufügen und die Zeichenfolgen rekursiv abrufen und verketten konnte. Aber ich möchte wirklich vermeiden, einen JSON-Serializer selbst zu implementieren, da ich bereits erfolgreich bin, da Alamofire bereits im Projekt verwendet wird. Auch die Implementierung eines neuen Serialisierers ist fehleranfällig und kein sauberer Weg, um das Problem IMO zu lösen.

Vielen Dank.

Antwort

0

Ich hatte nie die Lösung, aber als Workaround habe ich nur meine Objekte eine Dictionnary von all seinen Werten produzieren lassen. Dann füge ich rekursiv Child-Objekte Dictionnaries als die aktuellen Dictionary-Werte hinzu. Es fügt eine Funktion ToDict() zu jedem Objekt hinzu, das ich mit einem Protokoll erzwang. Wenn das resultierende Objekt nur aus einer Baumstruktur von Dictionnaries besteht, funktioniert die Serialisierung von ObjectMapper einwandfrei ...

Verwandte Themen