我编写了一个 tableView 来显示我的 Firebase 数据库中的帖子。在我的侧边栏中(在用户进入 tableView 之前)我添加了一个标签,它应该显示 tableView 中显示的帖子数量,以便用户知道里面是否有东西。所以我的问题是:如何跟踪存储在我的主题“offers”下的 child 的数量并将它们显示在我的 counterLbl 中?
var ref: DatabaseReference!
ref = Database.database().reference()
ref.child("offers").observe(.childAdded, with: { snapshot in
counterLbl.text = ...
}
最佳答案
如果您已经在监听 .childAdded
,您可以保留一个计数器并递增它:
var nodeCount: Int = 0
ref.child("offers").observe(.childAdded, with: { snapshot in
nodeCount = nodeCount + 1
counterLbl.text = String(nodeCount)
}
如果您的用例还可能从数据库中删除节点,您还应该监听 .childRemoved
以减少计数器:
ref.child("offers").observe(.childRemoved, with: { snapshot in
nodeCount = nodeCount - 1
counterLbl.text = String(nodeCount)
}
更高级的场景
请注意,此方法要求您下载要计数的所有节点。这在您当前的情况下应该可以正常工作,因为无论如何您都在下载所有优惠。但是随着您获得更多数据,您可能只想读取/显示优惠的一个子集,在这种情况下,上面的代码将只计算该子集中的节点。
如果在这种情况下您仍需要所有报价的计数,常用方法是在数据库中保留一个单独的计数器值,每次添加/删除报价时更新该计数器值。有关更多信息,请参阅:
关于ios - 计算 Firebase 数据库子项并显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53850339/