我将此代码用于表格视图中的加载注释:
func observePostComments(postId: String, completion: @escaping (String) -> Void) {
let db = Firestore.firestore()
db.collection("post-comments").document(postId).addSnapshotListener { (snapshot, err) in
if snapshot!.exists {
for key in (snapshot?.data()!.keys)! {
completion(key)
}
} else {
return
}
}
}
它的工作原理与应该的一样,但是每次用户创建新评论时,都会再次添加所有评论。我知道它对以下集合的工作方式:
querySnapshot?.documentChanges.forEach { diff in
if (diff.type == .added) { ....
但是我不知道如何在文档/字段级别上实现该功能。如果我想在文档级别执行相同操作,则会收到 “ DocumentSnapshot”类型的值?没有成员'documentChanges'。
将新的键值对添加到文档后,如何跟踪特定文档级别的更改?
答案 0 :(得分:1)
Firestore的更改检测仅适用于完整的文档。如果您需要了解文档内部的更改,则必须在自己的代码中进行检测,例如,将先前的DocumentSnapshot
与新的进行比较。
执行此操作的确切方法在某种程度上取决于您存储的数据,但是有两种广泛的方法:
另一种方法是在向UI添加相同的注释之前清除UI。像这样:
db.collection("post-comments").document(postId).addSnapshotListener { (snapshot, err) in
if snapshot!.exists {
clearCommentsFromUI() // this is a function you will have to implement
for key in (snapshot?.data()!.keys)! {
completion(key)
}