Я читаю данные из Firestore и анализирую их в пользовательской модели Thought
Для каждого документа в моей коллекции Firestore я добавляю новый объект Thought
к объекту @Published var thoughts
.
struct Thought: Identifiable {
public var id: String?
public var name: String
public var thought: String
public var color: String
}
class Observer: ObservableObject {
@Published var thoughts = [Thought]()
init(){
let db = Firestore.firestore()
db.collection("thoughts")
.addSnapshotListener { querySnapshot, error in
guard let documents = querySnapshot?.documents else {
print("Error fetching documents: \(error!)")
return
}
for document in documents {
var thoughtModel = Thought(id: "", name: "", thought: "", color: "")
thoughtModel.name = document.data()["name"] as! String
thoughtModel.thought = document.data()["thought"] as! String
thoughtModel.color = document.data()["color"] as! String
self.thoughts.append(thoughtModel)
}
print(self.thoughts) //PRINTS 4 DIFFERENT THOUGHT OBJECTS
}
}
}
struct ThoughtsView: View {
@ObservedObject var observer = Observer()
var body: some View {
VStack {
List {
ForEach(self.observer.thoughts) { thought in
ThoughtCard(color: thought.color,
thought: thought.thought,
name: thought.name)
//HERE I GET THE SAME CARD 4 TIMES INSTEAD OF 4 DIFFERENT CARDS
}
}
}
}
}
Когда я печатаю thoughts
, я вижу все 4 документа, которые в настоящее время находятся в моей базе данных Firestore. Однако, когда я пытаюсь выполнить итерацию по thoughts
в своем списке, я просто использую один и тот же объект Thought
4 раза вместо 4 разных объектов Thought
.
Я думаю, что проблема заключается в List
и в том, как я перебираю self.observer.thoughts
, но я не уверен, что делаю неправильно. Как заполнить список 4 объектами в self.observer.thoughts
?