Firebaseでデータベースを管理するために、プロジェクトにクラスを定義しました。これまで私がクラスでやったことは次のとおりです。Firebaseでは、取得したデータは.observeEventTypeメソッドから取り出されません
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
}
}
および方法はprint(db.getPrim())
のように、print()
方法で呼び出されます。しかし、コンソール(またはターミナル?とにかくxcode ..の底にある画面)は空の配列でしかないと言っています。私はprint("-----------------------")
で上記のステートメントを受け入れました。
-----------------------
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
.observeEventType()
方法でret
は、メソッドのブロックのうち、その値をとらないように思えます。私の知る限りでは、データは保管されるはずです..誰も私にヒントを与えることができますか?メソッドのパラメータとしてコードブロックがどのように機能するかはまだ分かりません。 Thnx !!
私は 'print =" ret:\(ret) ")を代入文' ret = s.value!の直下に書きました!として! [文字列] '。これは、私が投稿したコンソールメッセージが表示されてから数秒後に表示されました。 –
すべてのfirebase操作は定義上非同期です。だからあなたのprintステートメントが呼び出された時点で、firebaseのデータはまだフェッチされていません。 –
@AndréKoolAnswer –