如何在swift中正确更改shapshotListener的Where字段值?
我需要更改“snapshotListener”查询中的如何在swift中正确更改shapshotListener的Where字段值?,swift,firebase,google-cloud-firestore,listener,snapshot,Swift,Firebase,Google Cloud Firestore,Listener,Snapshot,我需要更改“snapshotListener”查询中的whereField变量值 即使我调用代码listener?.remove在更改之前,快照根据前面的查询条件重新开始侦听,而我使用新的whereField值调用“shapshotListener” 同时,快照根据新的查询条件也开始监听 因此,当文档发生任何更改时,我会收到两个不同的快照 我想用代码解释一下: 步骤1(假设UserID是111) 步骤2 listener?.remove 步骤3 UserID = 112 步骤4 listen
whereField
变量值
即使我调用代码listener?.remove
在更改之前,快照根据前面的查询条件重新开始侦听,而我使用新的whereField
值调用“shapshotListener”
同时,快照根据新的查询条件也开始监听
因此,当文档发生任何更改时,我会收到两个不同的快照
我想用代码解释一下:
步骤1(假设UserID是111)
步骤2
listener?.remove
步骤3
UserID = 112
步骤4
listener = Firestore.firestore().collection("Annotations").whereField("UserID", isEqualTo: \(UserID)).addSnapshotListener { (snapshot, error) in
if error != nil {}else {
if snapshot?.isEmpty == false && snapshot != nil {
for document in snapshot!.documents {
if let snapshotUserID = document.get("UserID") as? String {
print("snapshotUserID: \(snapshotUserID)")
print("UserID: \(UserID)")
}
}
}
}
}
现在,我为这两个UserID文档提供了2个shapshotListener
想象一下,如果用户ID为111的文档在控制台中有任何更改,它会这样写
snapshotUserID:111
用户ID:112
如何正确更改shapshotListener的查询参数?连接侦听器并接收结果时,无法更改查询。您现在所做的是您所能做的最好的事情——删除侦听器,构建一个新的查询,然后向该查询添加一个新的侦听器。如果不想处理新查询中的任何重复数据,则需要找出如何跳过不想处理的快照
listener = Firestore.firestore().collection("Annotations").whereField("UserID", isEqualTo: \(UserID)).addSnapshotListener { (snapshot, error) in
if error != nil {}else {
if snapshot?.isEmpty == false && snapshot != nil {
for document in snapshot!.documents {
if let snapshotUserID = document.get("UserID") as? String {
print("snapshotUserID: \(snapshotUserID)")
print("UserID: \(UserID)")
}
}
}
}
}