如何在 Swift 中观察多个节点中的 Firebase 子值变化?



我的Firebase数据库中有一个"users"节点。其中的每个用户都有一个带有 uid 的根。每个用户的属性之一是"坐标"。我想观察所有用户的任何这些坐标的任何变化。我几乎需要这样的东西:

usersDatabaseReference.child("*").child("coordinates").observe(.value, with: { (snapshot) in 

我的结构如下所示:

  • 用户

    • abcdefghijklmnop

      • 坐标:"12.345,12.345">

      • 其他道具

    • qrstuvwxyz

      • 坐标: "34.567,34.567">

      • 其他道具

因此,我正在寻找坐标值更改的任何用户的全局通知。

我是否需要遍历 userDatabaseReference 中的所有子项并为每个子项设置观察器?然后,每当添加或删除用户时,请重新设置所有内容?

你可以看到为什么我想使用通配符。我应该如何处理这个问题?

您可以只观察整个用户结构,然后使用快照来确定坐标是否是已更改的元素

usersDatabaseReference.child("users").observe(.childChanged, with: { (snapshot) in
//Determine if coordinate has changed
})

你也可以做的是:

func observeChildAdded(){
usersDatabaseReference.child("users").observe(.childAdded, with: { (snapshot) in
//Get the id of the new user added
let id = "123"
self.usersDatabaseReference.child("users").child(id).observe(.childChanged, with: { (snapshot) in
self.foundSnapshot(snapshot)
})
})
}
func foundSnapshot(_ snapshot: DataSnapshot){
let idChanged = snapshot.key
//Process new coordinates
}

因此,每当您添加新子级时,它都会自动为其设置一个观察器,但它们都会被推送到相同的函数 foundSnapshot

最新更新