#swift #foreach #swiftui
#swift #foreach #swiftui
Вопрос:
Я пытаюсь вывести все элементы в список, но цикл 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
для ваших книг.
Комментарии:
1. Я обновил вопрос, может быть, теперь станет ясно, что не так
id
?2. Теперь все ясно. Все ваши идентификаторы — это просто пустые строки.
3. @Jessy это так, спасибо. в модели заменено
var id: String = UUID().uuidString
наvar id: UUID
4. Почему UUID когда-либо должен быть переменным?