[英]Why is my SwiftUI List populating with the same item 4 times instead of all 4 items?
我正在从 Firestore 读取数据并将其解析为自定义 model Thought
对于我的 Firestore 集合中的每个文档,我 append 一个新的Thought
object 到一个@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
时,我看到了当前在我的 Firestore 数据库中的所有 4 个文档。 但是,当我尝试遍历列表中的thoughts
时,我只是相同的Thought
object 4 次,而不是 4 个不同的Thought
对象。
我认为问题在于List
以及我如何遍历self.observer.thoughts
,但我不确定我做错了什么。 如何使用self.observer.thoughts
中的 4 个对象填充列表?
我的清单确实有问题。 一旦我添加了id:
参数,看起来 List 能够识别每个Thought
object 并相应地显示它们。
struct ThoughtsView: View {
@ObservedObject var observer = Observer()
var body: some View {
VStack {
List {
ForEach(self.observer.thoughts, id: \.name) { thought in
ThoughtCard(color: thought.color,
thought: thought.thought,
name: thought.name)
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.