Ich versuche, Daten aus Firebase zu holen und fügen Sie es als ein Objekt in einem Swift-Array, aber jedes Mal, wenn ich die Anwendung ausführen, druckt das Array leer. Wenn ich eine print
Anweisung in die Beobachtung setzen, wird jeder Geldbeutel ausgedruckt, wie ich es will, aber der Geldbeutel wird nie an das Array angehängt.Füllen eines Arrays in Swift mit Firebase-Wörterbuch
var purses = [Purse]()
override func viewDidLoad() {
fetchPurse(completion: {print(self.purses.count)})
}
func fetchPurse(completion: @escaping() ->()){
let ref = FIRDatabase.database().reference(fromURL: "https://test-database-ba3a2.firebaseio.com/")
let user = (FIRAuth.auth()?.currentUser?.uid)!
let userRef = ref.child("users").child(user).child("devices")
userRef.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{
let purse = Purse()
purse.setValuesForKeys(dictionary)
self.purses.append(purse)
completion()
}
}, withCancel: nil)
}
Wo möchten Sie das Array drucken? Sie füllen das Array in einer asynchronen Funktion. Wenn Sie also versuchen, seine Werte außerhalb des Beendigungshandlers zu beobachten, drucken Sie höchstwahrscheinlich das Array, bevor es gefüllt wird. –
Ich rufe das Array in einer anderen Funktion auf und versuche, die .count-Methode zu verwenden, um eine bestimmte Anzahl von Tabellenzellen für meine Tabellenansicht basierend darauf zu laden, wie viele Geldbörsen es gibt. –
fetchPurse() sollte einen Abschluss-Handler haben und Sie sollten Ihre andere Funktion vom Complete-Handler aufrufen. –