Я новичок в SwiftUI и пытаюсь понять, как перебирать массив массивов из ответа API.
Я расшифровал ответ, и данные выглядят хорошо в debugPrint(upcomingEvents)
Пробовал распаковывать по желанию и следовать нескольким руководствам, но пока безуспешно.
Ошибка в представлении:
Cannot convert value of type '[UpcomingEventData]' (aka 'Array<Array<UpcomingEventDatum>>') to expected argument type 'Binding<C>'
Ошибка возникает здесь, в VStack, при попытке ForEach:
@State private var upcomingEvents: [UpcomingEventData]?
....
VStack {
if let events = upcomingEvents {
ForEach(events) { event in
Text(event)
}
}
}
.task {
do {
upcomingEvents = try await asyncUE.fetchWP()
...
У предстоящих событий есть данные и debugPrint(type(of: upcomingEvents))Swift.Optional<Swift.Array<Swift.Array<WW.UpcomingEventDatum>>>
Модель:
// MARK: - UpcomingEventDatum
struct UpcomingEventDatum: Codable, Identifiable {
let name: String
let id: Int
let txt, closeDate, headliners: String
let logo: String
let athleteImgOne: String
let athleteAltOne: String
let athleteImgTwo: String
let athleteAltTwo: String
let products: [Product]
let url: String
enum CodingKeys: String, CodingKey {
case name, id, txt
case closeDate = "close_date"
case headliners, logo
case athleteImgOne = "athlete_img_one"
case athleteAltOne = "athlete_alt_one"
case athleteImgTwo = "athlete_img_two"
case athleteAltTwo = "athlete_alt_two"
case products, url
}
}
// MARK: - Product
struct Product: Codable, Identifiable {
let btnTxt, url, id: String
enum CodingKeys: String, CodingKey {
case btnTxt = "btn_txt"
case url, id
}
}
typealias UpcomingEventData = [UpcomingEventDatum]
как вы определили upcomingEvents и что такое UpcomingEventData
Похоже, вы объявили upcomingEvents: [UpcomingEventData] вместо upcomingEvents: [UpcomingEventDatum] или просто upcomingEvents: UpcomingEventData





В настоящее время ваш upcomingEvents представляет собой массив массивов UpcomingEventDatum.
Для удаления ошибки используйте:
@State private var upcomingEvents: UpcomingEventData?
и
Text(event.name)
У вас есть массив массивов — по крайней мере, вы не сможете использовать
id: \.selfдля него (что в любом случае является плохой идеей). У вас должны бытьIdentifiableданные. Для дальнейшей отладки было бы полезно иметь минимальный воспроизводимый пример