Для простоты предположим, что есть такая коллекция пользователей, как эта
users
doc_0
name: "Pete"
doc_1
name: "Lewis"
doc_2
name: "Clark"
, следующий код присоединит наблюдателя к узлу пользователей и уведомит нас, когда пользователь будет добавлен, изменен или удален. Отмечая, что при первом запуске он будет перебирать каждого пользователя по одному и запускать .added, что позволит вам, например, первоначально заполнить массив.
func observeUserChanges() {
let usersCollectionRef = self.db.collection("users")
usersCollectionRef.addSnapshotListener { querySnapshot, error in
guard let snapshot = querySnapshot else {
print("Error fetching snapshots: \(error!)")
return
}
snapshot.documentChanges.forEach { diff in
let userName = diff.document.get("name") as? String ?? "No Name"
if (diff.type == .added) {
print("Added user: \(userName)")
}
if (diff.type == .modified) {
print("Modified user: \(userName)")
}
if (diff.type == .removed) {
print("Removed user: \(userName)")
}
}
}
}
При первом запуске выведите это
Added user: Pete
Added user: Lewis
Added user: Clark
затем, когда добавляется новый пользователь, мы видим это
Added user: Ted
при удалении Теда
Removed user: Ted