Bitte sehen Sie sich den folgenden Code an. Varable v
bekommt eine Art String
von Firebase db, dann wird es gedruckt.Kann ich in Firebase ein Signal von .observeSingleEventOfType() erhalten, dass es seinen Codeblock ausgeführt hat?
var v = "no"
let ref = FIRDatabase.database().reference()
ref.child("db").observeSingleEventOfType(.Value, withBlock: {snapshot in
v = snapshot.value!["blah"] as! String//assume it gets "ok"
print("This one shouldn't come first")
})
print("v is \(v)!!")
Die tatsächlichen Codes in .observeSingleEventOfType()
sind komplizierter, aber dieses ist in Ordnung.
Bei dieser Methode erhält die Variable v
eine String
. Aber die print-Anweisung würde "ok"
aber "no"
nicht drucken, da die Methode asynchron ist.
Was ich tun möchte, ist ein Signal oder etwas von .observeSingleEventOfType()
erhalten, dass es die Ausführung aller Codezeilen beendet, dann führen Sie die print()
Methode.
Ist es möglich zu tun, was ich will? Oder kann ich alle Codes pausieren, bis dieser Codeblock beendet ist?
Sie scheinen Ihre eigene Frage beantwortet zu haben. Wo genau stecken Sie fest? – Dravidian
@Dravidian Der Code soll ein Array von '[String: String]' erhalten und demselben Typ von Variablen zugewiesen werden, die in der Klasse deklariert sind. Der Aufruf der Daten von der designierten Variablen funktioniert nicht direkt nach der Ausführung der '.observeSingleEventOfType()' Methode. –
Ofcource es nicht, seine asynchrone. Sie müssen auf die Variable innerhalb der CompletionBlock zugreifen. Sehen Sie sich auch meine Antwort – Dravidian