2016-08-06 2 views
5

スウィフト2のレルムクエリの結果を反復しようとしています.2つのPersonClassオブジェクトが格納されています。スウィフトでレルムの結果を返す方法

クエリからの結果varは有効であり、2つのPersonClassオブジェクトを含みますが、結果を反復処理すると、nameプロパティは空の文字列になります。

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 
    } 
} 

答えて

7

問題は、あなたのモデルクラス内のプロパティの宣言からdynamic修飾子が省略されていることです。 dynamic修飾子は、Realmにプロパティへのアクセスを傍受する機会があることを保証するために必要で、Realmにディスク上のファイルからデータを読み書きする機会を与えます。この修飾子を省略すると、Swiftコンパイラはインスタンス変数に直接アクセスし、Realmをループから切り離します。

+0

ありがとうございます。完全に明確な答え。あなたが正しい方向に私を指摘して以来、私は将来の参考のために追加情報を含む回答を追加しました。 – Jay

0

ダイナミック

を修正関数や変数に対して静的なディスパッチ上で動的ディスパッチを使用するようにランタイムに指示しますが暗黙的変数や関数の宣言に@objc属性を追加します。

dynamicキーワードを使用するものはすべて、Swiftランタイムの代わりにObjective-Cランタイムを使用してメッセージをディスパッチします。

ダイナミックはアプリ解析の状況では便利ですが、静的なディスパッチによる最適化は犠牲になります。

動的ディスパッチは、KVC/KVOに依存するコアデータのようなObjective-Cランタイム関数との相互運用性を向上させます。

かつ迅速リファレンスから

は、Objective-Cのにより を表現することができるクラスの任意のメンバーにこの修飾子を適用します。メンバー宣言に動的 修飾子を付けると、Objective-Cランタイム を使用して、そのメンバーへのアクセスが常に動的にディスパッチされます。そのメンバへのアクセスは決してインライン化されず、または はコンパイラによってデバッグされません。

関連する問題