2016-08-11 2 views
0

Firebaseで(Swiftを使用して)ネストされたクエリを実行しています。これにより、2つのスナップショットが返されます。ひとつのスナップショットがありますときに通常、私は辞書で、クエリの結果を格納2つのFirebaseスナップショットをマージする方法

var query1 = [FIRDataSnapshot]! = [] 
query1.append(snapshot) 

誰もが単一の辞書エントリを作成するために、2つのスナップショットをマージする方法を知っていますか? ブロックは次のようになります。

_refHandle = FirebaseRef.child("query1key").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in 
    let key2 = snapshot.value?.objectForKey("key2") as! String 
    self.FirebaseRef.child("query2key").child(key2).observeSingleEventOfType(.Value, withBlock: { (snapshot2) in 
     // merge the two snapshots 
    }) 
}) 
+0

_refHandle = FirebaseRef.child( "query1key")observeEventType(.ChildAdded、withBlock:{(スナップショット) - のlet KEY2 = snapshot.value中>ボイド.objectForKey( "KEY2")としてFirebaseRef?! .child( "query2key")。child(key2).observeSingleEventOfType(.Value、withBlock:{(snapshot)in –

+0

)このようには、あなたの投稿を編集してください。そこには – Dravidian

答えて

1

両方のスナップショットが用意されていたら、あなたは彼らから必要な値を取り、その情報に基づいて新しいオブジェクトを作成することができます。

class MergedObject { 
    var value1: String! 
    var value2: String! 

    init(value1: String!, value2: String!) { 
     self.value1 = value1 
     self.value2 = value2 
    }   
} 

次に、そのオブジェクトを辞書に追加します。 。

_refHandle = FirebaseRef.child("query1key").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in 
    let key2 = snapshot.value?.objectForKey("key2") as! String 
    self.FirebaseRef.child("query2key").child(key2).observeSingleEventOfType(.Value, withBlock: { (snapshot2) in 
     var value1 = snapshot.childSnapshotForPath("value1").value as! String 
     var value2 = snapshot2.childSnapshotForPath("value1").value as! String 
     var mergedObject = MergedObject(value1: value1, value2: value2) 
    }) 
}) 
+0

ありがとう。私は基本的にスナップショットの外で処理しなければならないという同じ結論に達した。 –

関連する問題