【问题标题】:How can I observe Firebase child value changes in multiple nodes in Swift?如何在 Swift 中观察多个节点中的 Firebase 子值变化?
【发布时间】:2017-12-23 10:51:12
【问题描述】:

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

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

我的结构是这样的:

  • 用户

    • abcdefghijklmnop

      • 坐标:“12.345,12.345”

      • 其他道具

    • qrstuvwxyz

      • 坐标:“34.567,34.567”

      • 其他道具

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

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

您可以了解我为什么要使用通配符。我应该如何处理?

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database observers


    【解决方案1】:

    你可以从整体上观察用户结构,然后使用快照来确定坐标是否是发生变化的元素

    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

    【讨论】:

    • 我在发布问题后立即开始了这条路线。我怎么知道坐标是否是改变的元素(而不是在我的应用程序中保持最后已知的值)?
    • 我添加了另一个同样可行的想法,看看你的想法
    • 我认为第一种方法对我有用,感觉更干净,而不是为每个用户分配观察者。不过还是谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2017-11-18
    • 2022-12-15
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多