Я использую Firestore вместе со Swift.
У меня есть одноэлементный класс данных UserManager.Я вызываю это из моих разных ViewControllers, чтобы получить данные для заполнения моих табличных представлений.Я хочу, чтобы табличные представления автоматически обновлялись при обновлении коллекций, поэтому мне нужно использовать SnapshotListener.Все работает нормально, но я не уверен, как отсоединиться от слушателя, когда Viewcontroller закрыт.
В классе singleton у меня есть методы, подобные этому ниже.Метод дает список пользователей и будет вызываться из нескольких мест вокруг моего приложения.
Я также хочу вернуть ссылку на слушателя, чтобы я мог отсоединиться от него, когда Viewcontroller закрыт.Но я не могу заставить его работать.Приведенное ниже решение дает ошибку компилятора.
Я пытался посмотреть ссылку, например, здесь https://firebase.google.com/docs/firestore/query-data/listen, но мне нужно, чтобы она работала, когда данные загружаются в одноэлементный класс.непосредственно в Viewcontroller.Какой путь здесь?
В UserManager:
func allUsers(completion:@escaping ([User], ListenerRegistration?)->Void) {
let listener = db.collection("users").addSnapshotListener { querySnapshot, error in
if let documents = querySnapshot?.documents {
var users = [User]()
for document in documents {
let user = User(snapshot: document)
users.append(user)
}
completion(users, listener)
}
}
}
В ViewController:
override func viewDidLoad() {
super.viewDidLoad()
UserManager.shared.allUsers(completion: { (users, listener) in
self.users = users
self.listener = listener
self.tableView.reloadData()
})
}
deinit {
self.listener.remove()
}