#swift #debugging #mvvm #swiftui
Вопрос:
я новичок в SwiftUI, я пытаюсь реализовать список представлений, и я получил эту (наверное) синтаксическую ошибку, не могу ее найти, может быть, кто-нибудь может объяснить ?
У меня есть модель для моих площадок:
struct Venue: Codable {
let venueId: String
let name: String
let location: Location
let categories: [VenueCategory]?
private enum CodingKeys: String, CodingKey {
case venueId = "id"
case name
case location
case categories
}
}
Затем пользовательский вид, который я хочу перечислить:
struct VenueItemView: View {
@Binding var venue : Venue
var body: some View {
Text("(venue.name)")
}
}
Модель просмотра, в которой я храню места:
import Foundation
import FoursquareAPIClient
class FeedViewModel: ObservableObject {
@Published var venues: [Venue] = FoursquareManager.sharedManager().venues
}
И основной вид, уир, я получил эту ошибку:
import SwiftUI
struct FeedView: View {
@StateObject private var viewModel = FeedViewModel()
var body: some View { // Failed to produce diagnostic for expression
Text("Hello")
List(viewModel.venues) { v in
VenueItemView(venue: binding(for: v))
}
}
private func binding(for venue: Venue) -> Binding<Venue> {
guard let scrumIndex = viewModel.venues.firstIndex(where: { $0.venueId == venue.venueId }) else {
fatalError("Can't find scrum in array")
}
return $viewModel.venues[scrumIndex]
}
}
Ответ №1:
Подтвердите свое мнение, чтобы Identifiable
:
struct Venue: Codable, Identifiable {
var id: String {
venueId
}
let venueId: String
...
}
Или укажите id
непосредственно в ForEach
:
ForEach(items, id: .venueId) {