首页 文章

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

提问于
浏览
0

我正在检索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 回答

  • 1

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

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

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

  • 2

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

相关问题