Вопрос гласит:
Но я должен разделить данные на два
Я предполагаю, что это означает два массива; один для активного и один для закрытого.
var activeData = [...
var closedData = [...
Есть несколько способов сделать это
1) Запросить Firestore для всех полей состояния, равных активному, и загрузить эти документы в активный массив, а затем другой запрос для полей состояния, равных закрытым, и загрузите их в закрытом массиве
2) Я бы предложил более простой подход
if i.type == .added {
let id = i.document.documentID
let symbol = i.document.get("symbol") as? String ?? ""
let status = i.document.get("status") as? String ?? ""
if status == "active" {
self.activeData.append(Signal(id: id, symbol: symbol, status: status))
} else {
self.closedData.append(Signal(id: id, symbol: symbol, status: status))
}
}
и сделал бы то же самое в .modified и .removed; определить статус, чтобы код знал, из какого массива его удалить.
РЕДАКТИРОВАТЬ:
На основе комментария
Я не знаю, как запросить это коды.
Я предоставляю код для запроса сигналов, которые активны . Этот код будет возвращать только активные сигналы, и когда сигналы станут активными, неактивными и т. Д. c, это изменит signalArray , чтобы он оставался в синхронизации c с данными.
let dbCollection = Firestore.firestore().collection("Signals")
let query = dbCollection.whereField("status", isEqualTo: "active").addSnapshotListener( { querySnapshot, error in
guard let snapshot = querySnapshot else {
print("Error fetching snapshots: \(error!)")
return
}
snapshot.documentChanges.forEach { diff in
if (diff.type == .added) {
let signalToAdd = Signal(withDoc: diff.document)
self.signalArray.append(signalToAdd)
}
if (diff.type == .modified) {
let docId = diff.document.documentID
if let indexOfSignalToModify = self.signalArray.firstIndex(where: { $0.signal_id == docId} ) {
let signalToModify = self.signalArray[indexOfSignalToModify]
signalToModify.updateProperties(withDoc: diff.document)
}
}
if (diff.type == .removed) {
let docId = diff.document.documentID
if let indexOfSignalToRemove = self.signalArray.firstIndex(where: { $0.signal_id == docId} ) {
self.signalArray.remove(at: indexOfSignalToRemove)
}
}
}
})
Обратите внимание, что мой класс сигналов имеет инициализатор, который принимает QueryDocumentSnapshot для его инициализации, а также функцию .updateProperties для обновления его внутренних свойств.