Wenn ich versuche, Informationen von meinem Firebase-Server abzurufen, lade ich die Daten in bestimmte Variablen, damit ich später darauf zugreifen kann. Es scheint, dass ich nur auf die variablen Daten in der Swift-Funktion zugreifen kann, wo es die Daten von der Firebase-Datenbank erhält. Unten habe ich eine Druckfunktion, diese Druckfunktion druckt die richtigen Daten, aber wenn ich versuche, diese Daten später im Code zu drucken, wird nichts gedruckt.Variable nicht beim Speichern von Informationen aus Firebase mit Swift
(Ich verwende Swift 3.0 und Xcode Version 8.1)
Mein Code für diesen speziellen Ort:
func loadAllDataFromServerAboutGame(){
ref.child("\(gamePIN)").observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
self.player1Name = value?["player1Name"] as? String ?? ""
self.player2Name = value?["player2Name"] as? String ?? ""
self.player3Name = value?["player3Name"] as? String ?? ""
self.player4Name = value?["player4Name"] as? String ?? ""
self.player5Name = value?["player5Name"] as? String ?? ""
self.player6Name = value?["player6Name"] as? String ?? ""
self.playerAmountBeforeTextChanging = value?["numberOfPlayers"] as? String ?? ""
self.player1UID = value?["player1UID"] as? String ?? ""
self.player2UID = value?["player2UID"] as? String ?? ""
self.player3UID = value?["player3UID"] as? String ?? ""
self.player4UID = value?["player4UID"] as? String ?? ""
self.player5UID = value?["player5UID"] as? String ?? ""
self.player6UID = value?["player6UID"] as? String ?? ""
if let myNumber = NumberFormatter().number(from: self.playerAmountBeforeTextChanging) {
self.numberOFPLayers = myNumber.intValue
} else {
print("Error converting text into 'int' value!")
}
print("Transcription: \(self.numberOFPLayers)")
print("Player 3 Name: \(self.player3Name)")
// ...
}) { (error) in
print("DataBase ERROR:\(error.localizedDescription)")
}
}
Vielen Dank im Voraus!
Sie benötigen eine ganze View-Controller laden. Es scheint, als ob Sie die Variablen ausdrucken, bevor sie gesetzt wurden. Dies liegt daran, dass das Beobachtungsereignis asynchron ist, sodass jeder Code außerhalb der Sperrung aufgerufen werden kann, bevor die Sperrung abgeschlossen wurde. –