2016-09-17 2 views
0

Ich habe ein Array von Firebase-Snapshots var guardians: Array<FIRDataSnapshot> = []. Ich möchte jedes Kind Wert Snapshot zugreifen eine Schleife wie folgt aus:Holen Sie Daten aus dem Array von Firebase-Snapshots

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

Aber ich halte null für guardianID bekommen. Wie kann ich bestimmte untergeordnete Werte aus diesem Array abrufen? Referenz, hier was druckt self.guardians zu trösten:

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

Ich verwende Swift 3 mit Xcode 8.

Dank!

Antwort

1

Ich bin nicht sicher, ob die Frage beantwortet werden kann, ohne zu wissen, wie das Array aufgebaut ist. Ein Problem ist, dass die For-in-Schleifen-Variable ein NSFastEnumerationIterator ist, also muss sie auf die Art von "Sache" reduziert werden, die sie haben soll. Vielleicht hast du das getan, also ist das nur für zukünftige Referenz.

Das gesagt, ich habe etwas Code in die Hand genommen und es ein wenig abgebrochen - vielleicht wird es Sie in die richtige Richtung zeigen.

Der folgende Code liest alle Knoten mit .value ein und iteriert dann über den Snapshot und speichert jedes untergeordnete Element in einem Array als FDataSnapshot. Dann iteriert der Code über dieses Array und gibt den 'Guardian' von jedem Snapshot aus, der im Array gespeichert ist.

Ich habe auch Ihren Code die guardianID zu drucken und es funktioniert auch so meine Vermutung ist, liegt das Problem mit, wie das Array zunächst bevölkert wird oder in dieser Linie

für Snapshot in self.guardians

als der Snapshot ist ein 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!) 
      } 
    } 
}) 

* Dies ist Swift 3 und Firebase 2.x aber das Konzept ist das gleiche .

+0

Vielen Dank für das Posten. Das hat super funktioniert! Es war entscheidend, eine Ebene tiefer zu gehen, mit 'für Snapshot in self.guardians' und dann' für Kind in guardianArray'. Wenn ich von Parse zu Firebase gehe, dreht sich mein Kopf. Danke, dass du diese Logik für mich durchbrochen hast! – winston

Verwandte Themen