首页 > 解决方案 > 计算 Firebase 数据库子级并显示

问题描述

我编写了一个 tableView 来显示我的 Firebase 数据库中的帖子。在我的侧边栏中(在用户访问 tableView 之前),我添加了一个标签,该标签应显示 tableView 中显示的帖子数,以便用户知道里面是否有东西。所以我的问题是:如何跟踪存储在我的主题“优惠”下的孩子的数量并将它们显示在我的 counterLbl 中?

var ref: DatabaseReference!
ref = Database.database().reference()

ref.child("offers").observe(.childAdded, with: { snapshot in

counterLbl.text = ...
}

标签: iosswiftfirebasefirebase-realtime-database

解决方案


如果您已经在听.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)
}

更高级的场景

请注意,此方法要求您下载要计数的所有节点。这在您当前的情况下应该可以正常工作,因为无论如何您都在下载所有优惠。但是当您获得更多数据时,您可能只想读取/显示报价的子集,在这种情况下,上面的代码只会计算该子集中的节点。

如果在这种情况下您仍然想要所有报价的计数,常见的方法是在数据库中保留一个单独的计数器值,您每次添加/删除报价时都会更新该值。有关这方面的更多信息,请参阅:


推荐阅读