【问题标题】:Failed to produce diagnostic for expression无法生成表达诊断
【发布时间】:2021-09-23 08:42:02
【问题描述】:

我是 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)")
    }
}

ViewModel,当我存储场地时:

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]
    }
}

【问题讨论】:

    标签: swift debugging mvvm swiftui


    【解决方案1】:

    向Identifiable确认您的看法:

    struct Venue: Codable, Identifiable {
        var id: String {
            venueId
        }
        let venueId: String
        ...
    }
    

    或者直接在ForEach中指定id:

    ForEach(items, id: \.venueId) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多