gpt4 book ai didi

ios - 为什么我的 SwiftUI 列表用相同的项目填充了 4 次而不是所有 4 个项目?

转载 作者:行者123 更新时间:2023-11-28 23:25:05 29 4
gpt4 key购买 nike

我正在从 Firestore 读取数据并将其解析为自定义模型Thought

对于 Firestore 集合中的每个文档,我都会将一个新的 Thought 对象附加到 @Published varthought

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 对象 4 次,而不是 4 个不同的 Thought 对象。

我认为问题在于 List 以及我如何遍历 self.observer.thoughts,但我不确定我做错了什么.如何使用 self.observer.thoughts 中的 4 个对象填充列表?

最佳答案

确实是我的List有问题。添加 id: 参数后,List 似乎能够识别每个 Thought 对象并相应地显示它们。

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)
}
}
}
}
}

关于ios - 为什么我的 SwiftUI 列表用相同的项目填充了 4 次而不是所有 4 个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58925897/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com