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 只返回第一个值的主要内容,如果未能解决你的问题,请参考以下文章

foreach (xmlNode) 只插入第一个值

归并方法

php foreach输出数组只输出元素的第一个字符

foreach循环只返回数组中的一个项目

只获得第一个结果

获取下拉框第一个选项的值最后一个选项的值第二个选项的值