如何在 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 的查询参数?

无法在附加侦听器并接收结果时更改查询。你现在正在做的是你能做的最好的事情——删除监听器,构建一个新的查询,然后向该查询添加一个新的监听器。如果您不想处理新查询中的任何重复数据,您将想办法跳过您不想处理的快照。