Мне нужна помощь в реализации класса Firestore Manager. Для некоторых данных я считаю, что это лучший способ, чем многократное отсоединение слушателя и повторное подключение в нескольких ViewControllers.
Пример. В настоящее время я получаю массив jobs
из ViewController1 (VC1), используя приведенный ниже код.
func fsJobColl() {
self.jobCollectionRef = Firestore.firestore().collection("Job")
self.jobListener = self.jobCollectionRef
.whereField("jobUsers", arrayContains: Auth.auth().currentUser?.uid ?? "")
.addSnapshotListener { (snapshot, error) in
if let err = error {
debugPrint("Error fetching docs: \(err)")
} else {
self.jobs.removeAll()
self.jobs = Job.parseData(snapshot: snapshot)
//self.tableView.reloadData()
print(self.jobs)
//handleComplete()
}
}
}
Я делаю изменения в документе в VC4, и я хотел бы, чтобы это было показано в TableView в VC3 (когда пользователь возвращается).
Поэтому мне нужно jobs
, чтобы обновляется при изменении данных FS.
В FS все работает правильно и выполняет обновление сервера. Кто-нибудь может объяснить, как я могу это сделать?
Я начал создавать новый класс Firestore Manager ...
class FSManager {
static let shared = FSManager()
var jobs = [Job]()
var jobCollectionRef: CollectionReference!
var jobListener: ListenerRegistration!
func loadJobs(completion: @escaping ([Job]) -> Void) {
self.jobCollectionRef = Firestore.firestore().collection("Job")
self.jobListener = self.jobCollectionRef
.whereField("jobUsers", arrayContains: Auth.auth().currentUser?.uid ?? "")
.addSnapshotListener { (snapshot, error) in
if let err = error {
debugPrint("Error fetching docs: \(err)")
} else {
self.jobs.removeAll()
self.jobs = Job.parseData(snapshot: snapshot)
//self.tableView.reloadData()
print(self.jobs)
completion(self.jobs)
}
}
}
}
, который затем вызывается в VC1. Кажется, это работает, но я не понимаю, как я могу обновить объект в VC3.
FSLoadData.shared.loadJobs { jobs in
self.jobs = jobs
handleComplete()
}
Спасибо