我正在检索Firebase数据库中所有用户的快照。在我从我的"用户"中追加我的所有用户之后我的数据库的节点到一个用户数组,我试图打印用户数(应该是12),它说它是0。
我在if语句的右括号中添加了一个断点,向我显示用户数达到12.然而,到打印此数字时,它为零。单步执行很多只是很多汇编代码,它们什么也没告诉我。
我在viewDidLoad()方法中调用此函数,并尝试在调用此函数后打印用户计数,并在函数内打印它并且它仍为0.
func getUsers() {
let ref = Database.database().reference().child("users")
ref.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
user.id = snapshot.key
user.setValuesForKeys(dictionary)
self.users.append(user)
}
}, withCancel: nil)
print(users.count)
}
答案 0 :(得分:3)
在这里,你可以在下面修复一下。就像艾哈迈德所说:由于它是异步的,所以需要一些时间来获取数据。
func getUsers(completionHandler:@escaping (Int) -> ()){
let ref = Database.database().reference().child("users")
ref.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
user.id = snapshot.key
user.setValuesForKeys(dictionary)
self.users.append(user)
completionHandler(self.users.count)
}
})
override func viewDidLoad() {
super.viewDidLoad()
getUsers(){ (count) in
print(count)
}
}
这是非常简单的事情,我刚刚添加了一个完成处理程序。
答案 1 :(得分:2)
因为观察异步工作,并且在更新用户数组之前打印users.count ...