我一直试图让我的详细信息视图工作,但当给出当前从列表中 Select 的项目的预览参数时,它总是给我一个错误Cannot convert value of type 'Item.Type' to expected argument type 'Item'

这是详细的视图

import SwiftUI
import CoreData

struct FishDetailView: View {

    var item: Item

    @State var image : Data = .init(count: 0)
    
    var body: some View {
        Text(item.title ?? "")
        Text(item.details ?? "")
        Image(uiImage: UIImage(data: item.imageData ?? self.image)!)
            .resizable()
            .frame(width: UIScreen.main.bounds.width - 34, height: 210)
            .cornerRadius(15)
    }
}

struct FishDetailView_Previews: PreviewProvider {
    static var previews: some View {
        
        FishDetailView(item: Item) **<--- THE ERROR HAPPENS HERE**
    }
}

Contentview.swift

import SwiftUI
import CoreData

struct ContentView: View {
    // MARK: - PROPERTY

    @State var title: String = ""
    @State private var showSheet: Bool = false
    @State var image : Data = .init(count: 0)
    @Environment(\.managedObjectContext) var viewContext

        @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],
        animation: .default)
    private var items: FetchedResults<Item>
    
    // MARK: - FUNCTION
    private func deleteItems(offsets: IndexSet) {
        withAnimation {
            offsets.map { items[$0] }.forEach(viewContext.delete)

            do {
                try viewContext.save()
            } catch {
                let nsError = error as NSError
                fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
            }
        }
    }
    
    //: MARK - BODY

    var body: some View {
        NavigationView {
            VStack {
              
                List {
                    ForEach(items, id: \.self) { item in
                        NavigationLink(destination: FishDetailView(item: item)) {
                            Image(uiImage: (UIImage(data: item.imageData ?? self.image) ?? UIImage(systemName: "photo"))!)
                                .resizable()
                                .frame(width: UIScreen.main.bounds.width - 34, height: 210)
                                .cornerRadius(15)
                            HStack {
                                Text("\(item.details ?? "")")
                                
                            }//:HSTACK
                        }
                        // TODO: Insert timestamp here with .footnote font
                        }
                    }
                    
                    if showSheet {
                        AddFishView()
                    }
                }//: LIST
                .navigationBarTitle("Fishes", displayMode: .large)
                .navigationBarItems(trailing: Button(action: {
                    self.showSheet.toggle()
                })
                   {
                    Image(systemName: "camera.fill")
                })
                .sheet(isPresented: self.$showSheet) {
                    AddFishView()
                }
            } //: VSTACK
        } //: NAVIGATION
    }

// MARK: - PREVIEW

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        let persistenceController = PersistenceController.shared
        ContentView().environment(\.managedObjectContext, persistenceController.container.viewContext)
    }
}

如果我删除代码的预览部分,细节视图确实可以工作,但这并不是很理想,因为我希望看到我正在做什么,而不必在每次进行更改时在模拟器中打开应用程序.

我似乎弄不明白它为什么会这样,也不知道如何修复它.更聪明的人能帮上忙吗?

代码有点凌乱,因为这只是我正在进行的一个测试,我要将用户映像保存到核心数据中.

编辑:我已经try 了这个建议,但似乎没有解决我的问题PreviewProvider and ObservedObject properties

Here is the Item entity Entity image

推荐答案

import SwiftUI
import CoreData

struct FishDetailView: View {

    @ObservedObject var item: Item

    var body: some View {
        Text(item.title ?? "")
        ...
        // fyi your image should be a transformable attribute on the Item entity
    }
}

struct PreviewTestView_Previews: PreviewProvider {
    
    static var firstItem: Item? {
        let context = PersistenceController.preview.container.viewContext
        let fetchRequest = Item.fetchRequest()
        fetchRequest.fetchLimit = 1
        let results = try? context.fetch(fetchRequest)
        return results?.first
    }
    
    static var previews: some View {
        if let firstItem {
            FishDetailView(item: firstItem)
        }
        else {
            Text("Item not found")
        }
    }
}

Swift相关问答推荐

绑定到可选值的非可选属性?'

如何消除SwiftUI中SF符号的填充

SWIFT异步/等待,多个监听程序

MacOS 13-如何使用SwiftUI创建Message.App设置工具栏?

RealityKit - 从中心zoom 模型

macOS 的窗口框架中使用的真实类型和真实类型是什么?

确定路径是否相交的有效方法

在 Swift 的异步上下文中,如何指示我想要函数的同步版本?

如何在 SwiftUI 中将图像传递到 2 个视图

如何 for each 用户制作一个单独的按钮,以便在按下它时切换 isFollowingUser Bool 并更改为关注?

令人满意的 var body:协议扩展中的一些视图

SwiftUI 4 列表初始化程序在 iOS 中不可用

.onTapGesture 不适用于 Stepper,仅适用于其文本

Vapor - 流利的,将对象保存到 PostgreSQL

两个 Date 对象之间的所有日期 (Swift)

如何在 SwiftUI 中的一个视图上显示两个alert ?

枚举大小写的原始值必须是文字

从 Swift 初始化程序调用方法

通过单击表格视图中的单元格打开新的视图控制器 - Swift iOS

如何在椭圆形或圆形上裁剪 UIImage?