(Firebase)在数组中计算用户时,在数据库中打印错误的用户数

我正在检索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) } 

你走了,下面修复一下。 就像艾哈迈德所说:由于它是异步的,因此需要一些时间来获取数据。

 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) } } 

这是非常简单的事情,我刚刚添加了一个完成处理程序。

因为异步观察工作,并且在更新用户数组之前打印users.count …