Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在swift中正确更改shapshotListener的Where字段值?_Swift_Firebase_Google Cloud Firestore_Listener_Snapshot - Fatal编程技术网

如何在swift中正确更改shapshotListener的Where字段值?

如何在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

我需要更改“snapshotListener”查询中的
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)")
                    }
                }
            }
        }
    }