【发布时间】:2017-04-15 16:58:47
【问题描述】:
当我第一次问这个问题时,我并没有真正完成我的研究。但是经过 20 多个小时后,我的结构与 Firebase 文档中的完全一样。但是,我无法访问闭包之外的任何数据。这是数据应该写入的结构:
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) 是 Firebase 建议的方式,但我什至无法像使用 Struct 那样在更近的地方获得用户。
【问题讨论】:
-
不清楚你在问什么。 firebase 数据在闭包内有效,因此例如您要填充 tableView。您观察所需的节点,然后在闭包内返回数据。您遍历快照并填充一个数组(在闭包外部定义),一旦完成,tableView.reload(仍在闭包内)。从那时起,您的数据将存储在数组中并且可以使用。你根本不需要 DispatchQueue.main.async。
标签: ios swift firebase firebase-realtime-database closures