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

时间:2017-09-10 21:47:48

标签: ios swift firebase firebase-realtime-database

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

2 个答案:

答案 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 ...