Foreach 只返回第一个值
Posted
技术标签:
【中文标题】Foreach 只返回第一个值【英文标题】:Foreach is only returning the first value 【发布时间】:2020-11-26 19:24:21 【问题描述】:我正在尝试将所有元素输出到一个列表中,但 foreach 循环只输出第一个元素,并且输出的次数与元素数量相同
如果我尝试按如下方式显示任何元素session.books[5].name
,那么我会得到想要的元素,而不是第一个
//...
List
ForEach(self.session.books) book in
Text(book.name)
//...
//Model:
struct Book: Identifiable
var id: String = UUID().uuidString
var name: String
//This way I fetch books:
func getBooks()
db.collection("books").addSnapshotListener (querySnapshot, error) in
guard let documents = querySnapshot?.documents else
print("No documents")
return
self.books = documents.map queryDocumentSnapshot -> Book in
let data = queryDocumentSnapshot.data()
let name = data["name"] as? String ?? ""
return Book(id: .init(), name: name)
【问题讨论】:
【参考方案1】:你可以使用
List
ForEach(self.session.books.indices, id: \.self) index in
Text(self.session.books[index].name)
但您的图书的 id
的唯一性似乎有问题。
【讨论】:
我更新了问题,也许现在很清楚id
有什么问题?
现在很清楚了。您所有的 ID 都只是空字符串。
@Jessy,谢谢。在模型中将var id: String = UUID().uuidString
替换为var id: UUID
为什么 UUID 会是可变的?以上是关于Foreach 只返回第一个值的主要内容,如果未能解决你的问题,请参考以下文章