2016-09-17 15 views
0

Firebaseスナップショットの配列var guardians: Array<FIRDataSnapshot> = []があります。 Firebaseスナップショットの配列からデータを取得

print(self.guardians) 
for snapshot in self.guardians{ 
    let guardianID = (snapshot.value as? NSDictionary)?["guardian"] as? NSString 

しかし、私はguardianIDにnilを得続ける:私はこのようなループを使用して各スナップショットの子値にアクセスしたいと思います。この配列から特定の子値を取得するにはどうすればよいですか?参考のため、ここではコンソールにプリントをself.guardiansものです:私はXcodeの8でスウィフト3を使用してい

[Snap (guardians) { 
    "-KQaU9lVcUYzIo52LgmN" =  { 
     dependent = sJUCytVIWmX7CgmrypqNai8vGBg2; 
     guardian = jY2MtbIw4rQmgcZwTbLXNrL7tDq2; 
    }; 
}] 

ありがとう!

答えて

1

アレイがどのように構築されているかを知らずに質問に答えられるかどうかはわかりません。 1つは、For-inループ変数がNSFastEnumerationIteratorであるため、どのような 'もの'にダウンキャストする必要があるかです。あなたはこれをしているかもしれませんので、これは将来の参照のためのものです。

言われているように、私はいくつかのコードを作り、それを少し壊した - 多分それは正しい方向にあなたを指します。

以下のコードは、すべてのノードを.valueで読み取り、スナップショットを反復処理し、各子をFDataSnapshotとして配列に格納します。その後、コードはその配列を反復処理し、配列に格納されている各スナップショットから 'guardian'を出力します。

は、私はまた、guardianIDを印刷するようにコードを含まれ、それは同様に私の推測では、問題があるので、作品の配列が最初に読み込まれているかまたはself.guardians

の中にスナップショットのためにこのライン

にあり

スナップショットはNSFastEnumerationIteratorあるよう

let ref = self.myRootRef.child(byAppendingPath: "guardian_node")! 

ref.observe(.value, with: { snapshot in 

    if (snapshot!.value is NSNull) { 
      print("not found") 
    } else { 

      var guardianArray = [FDataSnapshot]() 

      for child in snapshot!.children { 
       let snap = child as! FDataSnapshot //downcast 
       guardianArray.append(snap) 
      } 

      for child in guardianArray { 
       let dict = child.value as! NSDictionary 
       let thisGuardian = dict["guardian"]! 
       print(thisGuardian) 

       //your code 
       let guardianID = (child.value as? NSDictionary)?["guardian"] as? NSString 
       print(guardianID!) 
      } 
    } 
}) 

*これはスウィフト3とFirebase 2.xのですが、考え方は同じです。

+0

これを投稿していただきありがとうございます。これは素晴らしい仕事でした! 'self.guardians'のスナップショット、' 'guardianArray''の子どものためにもっと深く進むことが重要でした。 ParseからFirebaseに行くと私の頭が回転します。私のためにこの論理を壊してくれてありがとう! – winston

関連する問題