私が最初にこの質問をしたとき、私は本当に研究をしていませんでした。しかし、20時間以上経ってからは、Firebaseのドキュメントとまったく同じような構造になっています。しかし、閉鎖外のデータにはアクセスできません。Closure外のデータにアクセスする、Firebase ObserveSingleEvent // SWIFT
struct UserStruct {
let name : String!
let age : String!
}
そして、それが呼び出されたときに、すべてが、データベースに完璧書かれている、それがnilで印刷されませんクロージャの内部で、それが実際の値を印刷しない:ここでは、データがに書かれるべき構造体であります明らかに。私はすでに試してみました
DispatchQueue.main.async {
}
しかし、それはどちらもうまくいきませんでした、誰かガイド私!何か助けていただければ幸いです。これはFirebaseの私の最後の問題です。
let currentUser = FIRDatabase.database().reference(withPath: "users").child((FIRAuth.auth()!.currentUser?.uid)!)
currentUser.observeSingleEvent(of: .value, with: { snapshot in
let value = snapshot.value as? NSDictionary
let name = value?["name"] as? String
let age = value?["age"] as? String
self.userAdded.insert(UserStruct(name: name, age: age), at: 0) // 1
let user = UserStruct.init(name: name, age: age) // 2
print("1 \(user.name)")
print("2 \(self.userAdded[0].name!)")
})
は、私がデータを取得する方法を2つ書いて、数2は、(2)Firebaseが示唆するような方法ですが、私も近い私ができるような構造体と外のユーザーを手に入れることができません。
あなたが何を求めているのかは不明です。ファイヤーベースデータはクロージャ内で有効です。たとえば、tableViewにデータを設定したいとします。あなたが望むノードを観察すると、データがクロージャの中に返されます。スナップショットを繰り返し、配列(クロージャの外側に定義されています)とそれが完了すると、tableView.reload(まだクロージャの内側にあります)を設定します。これ以降、データは配列に格納され、作業することができます。 DispatchQueue.main.asyncを一切行う必要はありません。 – Jay