代码之家  ›  专栏  ›  技术社区  ›  Radagast the Brown

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

  •  2
  • Radagast the Brown  · 技术社区  · 8 年前

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

    我的结构如下所示:

      • abcdefghijklmnop

        • 坐标:“12.345,12.345”

      • qrstuvwxyz

        • 坐标:“34.567,34.567”

        • 其他道具

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

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

    1 回复  |  直到 8 年前
        1
  •  8
  •   Jay    8 年前

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

    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
    }
    

    因此,每当你添加一个新的子对象时,它都会自动为它设置一个观察者,但它们都会被推到同一个函数