ios - 计算 Firebase 数据库子项并显示

标签 ios swift firebase firebase-realtime-database

我编写了一个 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/

相关文章:

ios - 以编程方式在 UIView 上设置 ViewController

ios - Realm 因 RLMException : object has been deleted or invalidated 崩溃

ios - iOS 上的语音合成在加载时出现奇怪的错误,并且没有并发

swift - 在哪种情况下足以使用隐式展开的可选值?

firebase - 以编程方式在 firebase 云功能中激活重试

ios - Firebase 动态链接如何在应用程序安装后存活下来的理论是什么?

javascript - 如何在 React 中使用 Firebase 应用程序检查。 403 错误

ios - 在 iOS 中读取 ApplicationSupportDirectory

ios - 服务器需要签名 URL(Unity Ads API)

iOS 图像帧动画在 Swift 中无法在设备方向上获得正确的坐标