Swift 如何检查值事件观察者是否已连接到Firebase节点?
我的问题是,我需要找出.value观察器是否已连接到Firebase实时数据库中的某个节点。现在,我正在执行以下步骤:Swift 如何检查值事件观察者是否已连接到Firebase节点?,swift,firebase,Swift,Firebase,我的问题是,我需要找出.value观察器是否已连接到Firebase实时数据库中的某个节点。现在,我正在执行以下步骤: 在节点rootReference.advertisementsAttending.userId上进行查询,从中我得到一个键值对的字典[advertisementId:advertisementTimestamp],用于某个用户参与的所有广告(实际上是advertisementId) 我循环获取的字典,对于每个advertisementId,我在节点rootReference.A
rootReference.child("advertisementsAttending").child(currentUser.userId).queryOrderedByValue().observe(.value, with: { (dataSnapshot) in
for keyValuePair in dataSnapshot.children {
let childSnapshot = keyValuePair as! DataSnapshot
let advertisementId = childSnapshot.key
let advertisementReference = rootReference.child("advertisements").child(advertisementId)
let advertisementReferenceHandle: UInt!
// Check if observer already is attached to advertisementReference
if observerDictionary[advertisementReference] == nil {
advertisementReferenceHandle = advertisementReference.observe(.value, with: { (advertisementSnapshot) in
let advertisement = Advertisement()
advertisement.populateAdvertisementFromSnapshot(snapshot: advertisementSnapshot)
advertisementsDictionary[advertisement.advertisementId] = advertisement
// Populating collectionView ...
})
// Add key-value pair to observerDictionary
observerDictionary[advertisementReference] = advertisementReferenceHandle
}
}
})
添加和删除观察者是相当简单的,所以有一个答案,但看看代码,您通常可能走错了路。当你可能只需要一个观察者时,你似乎正在添加很多观察者。你能稍微扩展一下你的用例吗?为什么要在特定节点上添加特定观察者?此外,您正在使用.value observer,如果有任何更改,它将加载节点中的所有内容。您可能希望研究一个更精细的解决方案,使用.childAdded、.childChanged和.childRemoved事件,这些事件只显示修改后的节点。添加和删除观察者非常简单,因此有一个答案,但查看代码,您通常可能走错了路。当你可能只需要一个观察者时,你似乎正在添加很多观察者。你能稍微扩展一下你的用例吗?为什么要在特定节点上添加特定观察者?此外,您正在使用.value observer,如果有任何更改,它将加载节点中的所有内容。您可能希望研究一种更精细的解决方案,其中.childAdded、.childChanged和.childRemoved事件只显示修改后的节点。