如何观察 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
我的结构是这样的:
用户
abcdefghijklmnop
坐标:“12.345,12.345”
其他道具
qrstuvwxyz
坐标:“34.567,34.567”
其他道具
所以我正在为坐标值发生变化的任何用户寻找全局通知。
我是否需要遍历 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
我的 Firebase 数据库中有一个 "users" 节点。其中的每个用户都有一个带有 uid 的根。每个用户的属性之一是 "coordinates"。我想观察所有用户的任何这些坐标的任何变化。我几乎需要这样的东西:
usersDatabaseReference.child("*").child("coordinates").observe(.value, with: { (snapshot) in
我的结构是这样的:
用户
abcdefghijklmnop
坐标:“12.345,12.345”
其他道具
qrstuvwxyz
坐标:“34.567,34.567”
其他道具
所以我正在为坐标值发生变化的任何用户寻找全局通知。
我是否需要遍历 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