2017-04-11 4 views
0

Ich arbeite an einem Projekt, das Realm für die Datenbank verwendet (die später in das Bild kommen wird). Ich habe gerade eine Schlüsselwertcodierung entdeckt und möchte sie verwenden, um eine TSV-Tabelle in Objekteigenschaften zu konvertieren (indem die Spaltenüberschriften aus der Tabelle als Schlüssel verwendet werden). Im Moment sieht es so aus:Iterate über Eigenschaften eines Objekts (in Realm, oder vielleicht nicht)

Gibt es eine Möglichkeit, über Eigenschaften ohne Spiegel zu iterieren? Ich hätte wirklich schwören können, dass ich in der Realm-Dokumentation (oder vielleicht sogar in der KVC-Dokumentation von Apple) gelesen habe, dass man etwas wie for property in Song.properties oder for property in Song.self.properties machen kann, um dasselbe zu erreichen.

Abgesehen davon, dass es ein wenig effizienter ist, der Hauptgrund, warum ich das tun möchte, ist, weil ich denke, dass ich das gelesen habe, denke ich, dass das Iterieren (oder die KVC?) Nur mit Strings funktioniert, Ints, Bools und Dates, also würde es automatisch die Eigenschaften überspringen, die Objekte sind (da Sie sie nicht auf dieselbe Weise einstellen können). Der obige Code ist tatsächlich eine Vereinfachung meines Codes, in der aktuellen Version, die ich zur Zeit die Objekte wie dieses Überspringen bin:

let propertiesToSkip = ["title", "artist", "genre"] 
for property in mirror.children where !propertiesToSkip.contains(property.label!) { 
... 

Habe ich vorstellen, diese .properties Sache? Oder gibt es eine Möglichkeit, auf diese Weise zu iterieren und Objekte/Klassen automatisch zu überspringen, ohne sie wie oben zu benennen?

Danke :)

Antwort

1

Nein, Sie haben es sich nicht vorgestellt. :)

Realm macht das Schema, das die Eigenschaften jedes Modelltyps in einer Datenbank enthält, an zwei Stellen verfügbar: in der übergeordneten Instanz Realm oder in einer Object selbst.

Im Realm Beispiel:

// Get an instance of the Realm object 
let realm = try! Realm() 

// Get the object schema for just the Mirror class. This contains the property names 
let mirrorSchema = realm.schema["Mirror"] 

// Iterate through each property and print its name 
for property in mirrorSchema.properties { 
    print(property.name) 
} 

Realm Object Instanzen für das Objekt über die Object.objectSchema Eigenschaft das Schema aus.

In der Realm Swift-Dokumentation finden Sie unter schema property of Realm weitere Informationen darüber, welche Art von Daten Sie aus den Schemaeigenschaften herausholen können. :)

+0

Danke, das scheint es zu sein! Wenn ich jedoch nach 'property.type! = Object' suche, bekomme ich" Binary operator! = Kann nicht auf Operanden vom Typ 'PropertyType' und 'Object.Type' angewendet werden. Weißt du, wie man diese so interpretiert, dass sie jeweils gleich sind oder "Eigenschaften" enthalten möglicherweise noch keine Objekte/Listen? –

+0

Gern geschehen! Hmm, 'property.type' ist eine Objective-C enum (https://github.com/realm/realm-cocoa/blob /255b2018c19398efaa52e816ccf59ef11be24cbd/Realm/RLMConstants.h#L51) Angabe des tatsächlichen Typs dieser Eigenschaft Sie müssen sicherstellen, dass Sie die enum-Werte anstelle der tatsächlichen Klassennamen vergleichen :) – TiM

Verwandte Themen