Ich lese ein paar Fragen dazu. Aber ich habe immer noch Probleme mit asynchronen Funktionen.Asynchrone Funktionen und Firebase mit Swift 3
Zum Beispiel: Ich habe ein viewController1
wo eine Taste, um ein viewController2
eine segue auszuführen. In der Klasse viewController2
initialisiere ich einige Werte in einer anderen Klassendatei mit dem Namen exampleClass
. Diese Werte werden aus Firebase-Datenbank- oder Standortwerten abgerufen. Diese Werte brauchen einen kleinen Moment, der abgerufen werden muss. Ich gebe diese Werte von exampleClass
in meine viewController2
zurück. Ich drucke diese Werte in viewController2
viewDidLoad()
.
Mein Problem: Das Gerät wartet nicht, dass die Werte abgerufen werden und folgende Funktionen ausführen. Ergebnis: Wenn ich den Knopf berühre, sind die gedruckten Werte nil
Werte. Es kann auch die App zum Absturz bringen, wenn ich den Code nicht absichern kann.
Was ich bisher gefunden habe: ich gelernt, dass ich nur eine func am Ende eines Firebase snapshot
nennen müssen (zum Beispiel) wie folgt aus:
userRef.observeSingleEvent(of: .value, with: { (snapshot) -> Void in
self.name = snapshot.value as! String!
print(self.name)
self.forceEnd()
}) { (error) in
print(error.localizedDescription)
}
ich diese Funktion mit dem Namen forceEnd
deutlich sein. Das funktioniert nicht für mich. Ich habe auch versucht, Handler zu erstellen, aber keine positiven Ergebnisse.
Meine Frage: Wie kann ich das Gerät zwingen, auf die Werte zu warten, bevor die folgende Frage ausgeführt wird?
, die nicht funktioniert. Hier ist meine Funktion: 'func initUserName (abgeschlossen: @escaping() -> Void) { laß userRef = ref.child (" Benutzer "). Child ((user? .uid)!). Child (" name ") userRef.observeSingleEvent (von: .value, mit: {(Snapshot) -> Void in lassen Name: String = snapshot.value als String self.name = name fertig() }) {(Fehler) in print (error.localizedDescription) } } ' –
wie folgt verwendet:.' Hauptbenutzer() initUserName() { print ("Daten abgerufen") } ' –
verwenden ich es richtig? –