2016-08-06 29 views
5

Ich versuche, über Ergebnisse von einer Realm-Abfrage in Swift 2 zu iterieren. Es sind zwei PersonClass Objekte gespeichert.Wie man über Ergebnisse in Realm mit Swift iteriert

Die Ergebnisse var aus der Abfrage sind gültig und enthalten zwei PersonClass-Objekte. Wenn Sie jedoch über die Ergebnisse iterieren, sind die name -Eigenschaften leere Strings.

class PersonClass: Object { 
    var name = "" 
} 

let realm = try! Realm() 

@IBAction func button0Action(sender: AnyObject) { 
    let results = realm.objects(PersonClass) 

    print(results) //prints two PersonClass object with the name property populated 

    for person in results { 
     let name = person.name 
     print(name) //prints and empty string 
    } 
} 

Antwort

7

Das Problem ist, dass Sie den dynamic Modifikator aus der Eigenschaftsdeklaration in Ihrem Modellklasse weggelassen. Der Modifizierer dynamic ist erforderlich, um sicherzustellen, dass Realm eine Möglichkeit hat, den Zugriff auf die Eigenschaften abzufangen, wodurch Realm die Möglichkeit erhält, die Daten aus der Datei auf der Festplatte zu lesen/schreiben. Wenn dieser Modifikator weggelassen wird, kann der Swift-Compiler direkt auf die Instanzvariablen zugreifen und Realm aus der Schleife herausschneiden.

+0

Vielen Dank. Perfekt klare Antwort. Da Sie mich in die richtige Richtung wiesen, fügte ich eine Antwort mit zusätzlichen Informationen für zukünftige Referenz hinzu. – Jay

0

Dynamische

Tells der Laufzeit modifizierten dynamischen Dispatch über statische Dispatch für die Funktion oder Variablen verwenden

implizit die @objc Attribut auf die Variable oder Funktionsdeklaration hinzufügt.

Alles, was das dynamic-Schlüsselwort verwendet, verwendet die Objective-C-Laufzeit anstelle der Swift-Laufzeit, um Nachrichten an es zu senden.

Dynamic ist nützlich für App-Analysesituationen, opfert jedoch Optimierungen, die durch den statischen Versand bereitgestellt werden.

Dynamic Dispatch bietet eine bessere Interoperabilität mit Objective-C-Laufzeitfunktionen wie Core Data, die auf KVC/KVO basieren.

Und von der Swift-Sprachreferenz

Wenden Sie diesen Modifikator auf jedes Mitglied einer Klasse, die von Objective-C dargestellt werden kann. Wenn Sie eine Elementdeklaration mit dem dynamischen -Modifikator markieren, wird der Zugriff auf dieses Element immer dynamisch mithilfe der Objective-C-Laufzeit ausgelöst. Der Zugriff auf dieses Mitglied wird nie inline oder vom Compiler devirtualisiert.