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

How can I observe Firebase child value changes in multiple nodes in Swift?

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

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

我的结构是这样的:

所以我正在为坐标值发生变化的任何用户寻找全局通知。

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

你明白我为什么要使用通配符了吧。我该如何处理?

你可以只观察users的整体结构,然后通过快照判断坐标是否是变化的元素

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
}

所以每当你添加一个新的 child 它会自动为它设置一个观察者,但它们都会被推送到同一个函数 foundSnapshot