Не удалось произвести диагностику для выражения

#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) {