多个Firestore快照相互覆盖

时间:2019-05-13 20:32:33

标签: arrays swift google-cloud-firestore

我检查Firestore数组是否包含来自另一个数组(不是Firestore数组)的字符串。然后将数据放在字典中

 func loadData(){
        for i in 0..<testTable.count {

        let db = Firestore.firestore()

        db.collection("Ingredients").whereField("compName", arrayContains: testTable[i] ).getDocuments(){
            querySnapshot, error in
            if let error = error {
                print("\(error.localizedDescription)")
            }else if let querySnapshot = querySnapshot {
                if (querySnapshot.isEmpty == false){

                self.ingredientsArray = querySnapshot.documents.compactMap({Ingredients(dictionary: $0.data())})

                    print("\(self.ingredientsArray)")
                    DispatchQueue.main.async {
                        self.tableView.reloadData()

                    }
                }
            }

        }
    }
}

问题在于字典按预期仅保留了最后一个快照中的数据。有没有办法保留所有快照中的所有数据?

1 个答案:

答案 0 :(得分:0)

在您重新分配数组self.ingredientsArray时会发生这种情况,因此请替换

 self.ingredientsArray = querySnapshot.documents.compactMap({Ingredients(dictionary: $0.data())})

使用

let res = querySnapshot.documents.compactMap({Ingredients(dictionary: $0.data())})
self.ingredientsArray.append(contentsOf:res)