如何在 swift 中正确更改 shapshotListener 的 whereField 值?
How can i change the whereField value of shapshotListener properly in swift?
我需要更改“snapshotListener”查询中的 whereField
变量值。
即使我在更改之前调用代码 listener?.remove
,根据先前查询条件的快照正在重新开始监听,而我正在使用新的 whereField
值调用“shapshotListener”。
同时,根据新查询条件的快照也开始监听。
所以当文件有任何变化时,我会收到 2 个不同的快照。
我想用代码解释一下:
第一步(认为UserID是111)
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)")
}
}
}
}
}
第 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 文档的 shapshotListener。
想如果UserID为111的文档有什么变化,在console中会这样写;
快照用户 ID: 111
用户ID:112
如何正确更改 shapshotListener 的查询参数?
无法在附加侦听器并接收结果时更改查询。你现在正在做的是你能做的最好的事情——删除监听器,构建一个新的查询,然后向该查询添加一个新的监听器。如果您不想处理新查询中的任何重复数据,您将想办法跳过您不想处理的快照。
我需要更改“snapshotListener”查询中的 whereField
变量值。
即使我在更改之前调用代码 listener?.remove
,根据先前查询条件的快照正在重新开始监听,而我正在使用新的 whereField
值调用“shapshotListener”。
同时,根据新查询条件的快照也开始监听。
所以当文件有任何变化时,我会收到 2 个不同的快照。
我想用代码解释一下:
第一步(认为UserID是111)
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)")
}
}
}
}
}
第 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 文档的 shapshotListener。
想如果UserID为111的文档有什么变化,在console中会这样写;
快照用户 ID: 111
用户ID:112
如何正确更改 shapshotListener 的查询参数?
无法在附加侦听器并接收结果时更改查询。你现在正在做的是你能做的最好的事情——删除监听器,构建一个新的查询,然后向该查询添加一个新的监听器。如果您不想处理新查询中的任何重复数据,您将想办法跳过您不想处理的快照。