一尘不染

使用Swift 3的Firebase计算孩子的数量

swift

我有一个字符串数组,我正在尝试通过Firebase填充它。它是一个聊天应用程序,当用户创建房间时,他或她将房间命名。当用户登录并进入登录页面时,它会查询他或她正在参与的所有房间,我希望该房间能填充表格视图。在firebase文档中,我找到了childrenCount,但似乎无法正常工作。到目前为止,这是我尝试过的

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let ref = firebase.child("users").child(fUID).child("participating")

    ref.observe(.value, with: { (snapshot: FIRDataSnapshot!) in
        print(snapshot.childrenCount)
        rooms.count = snapshot.childrenCount
    })

    return rooms.count
}

我得到一个错误,即计数是仅获得属性。我如何填充该数组计数?


阅读 246

收藏
2020-07-07

共1个答案

一尘不染

Firebase数据是异步加载(和同步)的。这很容易查看是否添加了一些调试日志记录:

let ref = firebase.child("users").child(fUID).child("participating")

print("Starting observing");
ref.observe(.value, with: { (snapshot: FIRDataSnapshot!) in
    print("Got snapshot");
    print(snapshot.childrenCount)
    rooms.count = snapshot.childrenCount
})

print("Returning count");
return rooms.count

运行此代码段时,日志记录输出为:

开始观察

退货计数

得到快照

这可能不是您期望输出的顺序。这也解释了为什么计数永远不会正确:数据尚未加载,因此无法计数。

这就是Firebase侦听器使用回调块的原因:在同步数据时调用该块。

2020-07-07