2017-07-17 10 views
0

私は、少なくとも6層の階層と各ノードの多くの子を持つ大規模なfirebaseデータベースを使って作業しています。スナップショット全体を解析し、オブジェクトモデルに変換したかったのです。私はthis解決策を見つけましたが、私の意見では、各ノードの子ノードを解析するとfirebaseへの呼び出しが必要になるため、指数関数的に待ち時間が長くなるため、非常に非効率です。 "ref.observeSingleEvent"がfirebaseを呼び出す代わりにローカルで実行される方法はありますか?他のより良い選択肢は、非常に高く評価されるだろう。Swift Firebaseオブジェクトモデルへのスナップショット

+0

あなたはそれの下で、多くのchildernsでFirebaseのマップをダウンロードすることができますはい、あなたはFirebaseに1つの以上の呼び出しを行う必要はありませんすべてのchildernが1つのマップに該当する場合は、そのマップをダウンロードします。 –

答えて

1
//this goes into your call (observeSingleEvent) 
let enumerator = snapshot.children //assuming you use snapshot as name 
    while let rest = enumerator.nextObject() as? FIRDataSnapshot { 
     // this loops through every child in that map 
     let values = (rest as! DataSnapshot).value as? NSDictionary 
     let coins= values?["coins"] as? Int ?? 0 
     //above code looks for a key with username and grabs the value from that. If it is not a string value it returns the default value. 
     //use above code for picture 1 
     if (rest as! DataSnapshot).key == "slot"{ 
     let enumeratorMap1 = (rest as! DataSnapshot).children 
     while let rest2 = enumeratorMap1.nextObject() as? FIRDataSnapshot { 
     let valuesMap1 = (rest2 as! DataSnapshot).value as? NSDictionary 
     //loop through values in new map 
     //use this methodes for looping through maps, as stated in picture 2 
     //keep repeating this method for any child under the map 
      } 
     } 
    } 

写真1: enter image description here

写真2: enter image description here

+0

これは膨大なコードを生成しましたが、他のソリューションよりも優れた方法です。 – tectonicpie

+0

@tectonicpieはい私は知っていますが、他の方法はないと思いますが(私が知りたいのですが)、それはあなたのデータをどのように構築するかによって大きく異なります。 –

+0

このソリューションをオブジェクトの配列で動作させるにはどうすればよいですか? "name":[{object1}、{object2}、{object3}] 名前とその配列をNSDictionaryに変換できますが、配列内にはキー値のペアはなくオブジェクトの値だけがあります。 – tectonicpie

関連する問題