Я использую addSnapshotListener
для получения данных в режиме реального времени.
Когда данные добавляются в мою базу данных Firestore, я получаю неожиданный результат:
func addItem(title: String) {
self.db.collection("items").document(stage.stageId).setData([
"title": title,
]) { err in
if let err = err {
print("Error adding document: \(err)")
} else {
}
}
}
Например, если элементы пусты и вы выполняете addItem (title:" Test ")
один раз, три элемента данных с заголовком «Тест» отображаются в ListView
.
struct ListView: View {
@ObservedObject var fetcher = Fetcher()
var body: some View {
VStack {
ForEach(self.fetcher.data.indices, id: \.self) { idx in
Text(self.fetcher.data[idx].title)
}
}
}
}
class Fetcher: ObservableObject {
@Published var data: [ItemModel] = []
private var db: Firestore!
init() {
db = Firestore.firestore()
fetchData()
}
private func fetchData() {
self.db.collection("items").addSnapshotListener { querySnapshot, error in
if let error = error {
print("Error getting documents: \(error)")
}
guard let documents = querySnapshot?.documents else {
print("Error fetching documents: \(error!)")
return
}
for document in documents {
self.data.append(ItemModel(
title: document.data()["title"]as! String,
))
}
}
}
}
struct ItemModel: Identifiable {
var id = UUID()
var title: String
}
Что-то не так с кодом выше?
Спасибо.