我正在从Firestore中获取数据并设置侦听器。数据存储在一个数组中,以后可在API调用中使用。我只想向该数组添加新数据。我已经设置了仅用于“添加”对文档所做更改的侦听器。
这是我到目前为止所执行的:
db.collection("name").whereField("id", isEqualTo: id).addSnapshotListener({ (querySnapshot, error) in
guard let snapshot = querySnapshot else { return }
snapshot.documentChanges.forEach({ (change) in
if change.type == .added {
do {
for document in snapshot.documents {
// decode method code is shown below
let object = try document.decode(as: Object.self)
self.objectArray.append(object)
}
} catch {
print(error)
}
}
})
})
解码方法
func decode<T: Decodable>(as objectType: T.Type, includingId: Bool = true) throws -> T {
var documentJson = data()
if includingId {
documentJson?["id"] = documentID
}
let documentData = try JSONSerialization.data(withJSONObject: documentJson, options: [])
let decodedObject = try JSONDecoder().decode(objectType, from: documentData)
return decodedObject
}
对于我的测试数据,我在Firestore集合中只有10个文档,但是在第一次读取时,数组最终包含100个对象。
应该为10,并且每次在该Firestore集合上发生写入时,都只会附加新数据。
答案 0 :(得分:1)
您正在同一循环中循环snapshot.documentChanges
和snapshot.documents
。我不确定您要使用这些嵌套循环来完成什么,但是对我来说这没有任何意义。如果您想知道查询返回了多少文档,只需查看snapshot.documents
,因为它将包含整个文档集。