繁体   English   中英

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

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

我的Firebase数据库中有一个“用户”节点。 其中的每个用户都有一个带有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
}

这样,每当您添加一个新子项时,它都会自动为其设置观察者,但是它们都被推到了发现的同一函数中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM