У меня есть следующий код для начала прослушивания изменений в определенном каталоге firestore:
func updateCart(){
database.collection("Users").document(currentUserUUID!).collection("Transactions").addSnapshotListener { querySnapshot, error in
guard let snapshot = querySnapshot else {
print("Error fetching snapshots: \(error!)")
return
}
snapshot.documentChanges.forEach { event in
let Active = event.document.data()["Active"] as? Bool
let Type = event.document.data()["Instore"] as? Bool
let Store = event.document.data()["Store"] as? String
let TDate = event.document.data()["Date"] as? String
if (Active == true) {
print("New Transaction at \(Store!) - (Instore location:\(Type!)) on \(TDate!)")
self.searchCart(Document: event.document.documentID)
self.DocumentID = event.document.documentID
self.startTransaction()
}
if (event.type == .modified && Active == false){
print("Transaction at \(Store!) - (Instore location:\(Type!)) on \(TDate!) is no longer active or has been finalized")
let updatedData = ["Total": "\(self.Total)","Saved": "\(self.Savings)"]
database.collection("Users").document(currentUserUUID!).collection("Transactions").document(event.document.documentID).setData(updatedData, merge: true)
self.completeTransaction()
self.DocumentID = " "
}
}
}
}
В viewDidLoad я запускаю функцию: updateCart (), но когда поле Active в базе данных изменяется на false, я пытаюсь остановить прослушиватель в приложении. Я попробовал следующий код, но он не останавливает слушателя:
func detachListener() {
let listener = database.collection("Users").document(currentUserUUID!).collection("Transactions").addSnapshotListener { querySnapshot, error in
if error != nil{
print(error as Any)
}
}
listener.remove()
}