Ich definierte eine Klasse in einem Projekt, um meine Datenbank in Firebase eingerichtet verwalten. Das Folgende habe ich bisher mit der Klasse gemacht.In Firebase, abgerufene Daten nicht aus der. ObserveEventType-Methode
import Foundation
import Firebase
class db{
class func getPrim() -> [String]{
var ret = [String]()
let ref = FIRDatabase.database().reference()
ref.child("bunya1").observeEventType(FIRDataEventType.Value, withBlock: {
s in
ret = s.value! as! [String]
})
print("ret: \(ret)")
return ret
}
}
und das Verfahren wird in einem print()
Verfahren, wie print(db.getPrim())
genannt. Aber was die Konsole (oder Terminal? Sowieso der Bildschirm am unteren Rand von xcode ..) sagt, ist nur ein leeres Array. Ich habe die obige Aussage mit print("-----------------------")
begrüßt.
-----------------------
ret: []
[]
-----------------------
2016-09-07 20:23:08.808 이모저모[36962:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
2016-09-07 20:23:08.815 이모저모[36962:] <FIRAnalytics/INFO> Firebase Analytics enabled
scheint, wie in ret
.observeEventType()
Verfahren findet nicht seinen Wert aus dem Verfahrensblock. Soweit ich weiß, sollen die Daten aufbewahrt werden. Kann mir jemand einen Tipp geben? Ich verstehe immer noch nicht, wie der Code-Block als Methodenparameter funktioniert. Thnx !!
Ich schrieb 'print (" ret: \ (ret) ")' direkt unter der zuweisenden Anweisung 'ret = s.value! wie! [Zeichenfolge] '. Dieser wurde ein paar Sekunden nachdem die Konsolennachrichten, die ich gepostet hatte, aufgetaucht waren, gedruckt. –
Alle Firebase-Operationen sind per Definition asynchron. Wenn also die Druckanweisungen aufgerufen werden, wurden die Daten aus dem Firebase noch nicht abgerufen. –
@ AndréKool poste es als Antwort –