在基于json的结构数组中迭代会导致预览失败

在基于json的结构数组中迭代会导致预览失败,json,swift,swiftui,Json,Swift,Swiftui,代码从list.json获取json数据,我创建了一个swift view BookView作为另一个文件 import SwiftUI struct product: Codable, Hashable { var name: String var author: String var page: String } struct ContentView: View { func jsonTwo() -> [product]{

代码从list.json获取json数据,我创建了一个swift view BookView作为另一个文件

import SwiftUI

struct product: Codable, Hashable {
    var name: String
    var author: String
    var page: String
}

struct ContentView: View {
    
    func jsonTwo() -> [product]{
            let url = Bundle.main.url(forResource: "list", withExtension: "json")!
            let data = try! Data(contentsOf: url)
            let decoder = JSONDecoder()
            let products = try? decoder.decode([product].self, from: data)
            return products!
        }
    
    @State var number: Int = 5
    
    var body: some View {
        NavigationView {
            VStack {
                Form {
                    ForEach(jsonTwo(), id: \.self) {item in
                        BookView(name: "item.name",author: "item.author",page: "item.page")
                    }
                }
                .navigationBarTitle("Books")
                Button(action: {
                    // Button tapped
                }, label: {
                        Image(systemName: "plus.rectangle")
                            .font(Font.system(.largeTitle).bold())
                            .foregroundColor(.primary)
                    })
                        .padding(.top)
            }
        }
    }

}
这段代码告诉我错误“无法在此文件中预览--更新预览失败”,但下面的代码工作正常(ForEach语句中的差异)

import SwiftUI

struct product: Codable, Hashable {
    var name: String
    var author: String
    var page: String
}

struct ContentView: View {
    
    func jsonTwo() -> [product]{
            let url = Bundle.main.url(forResource: "list", withExtension: "json")!
            let data = try! Data(contentsOf: url)
            let decoder = JSONDecoder()
            let products = try? decoder.decode([product].self, from: data)
            return products!
        }
    
    @State var number: Int = 5
    
    var body: some View {
        NavigationView {
            VStack {
                Form {
                    ForEach(0..<number) {item in
                        BookView(name: "item.name",author: "item.author",page: "item.page")
                    }
                }
                .navigationBarTitle("Books")
                Button(action: {
                    // Button tapped
                }, label: {
                        Image(systemName: "plus.rectangle")
                            .font(Font.system(.largeTitle).bold())
                            .foregroundColor(.primary)
                    })
                        .padding(.top)
            }
        }
    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .previewDevice("iPhone 11")
    }
}
导入快捷界面
结构产品:可编码、可散列{
变量名称:String
var作者:String
变量页:字符串
}
结构ContentView:View{
func jsonTwo()->[产品]{
让url=Bundle.main.url(forResource:“list”,扩展名为:“json”)!
let data=try!data(contentsOf:url)
let decoder=JSONDecoder()
let products=try?decoder.decode([product].self,from:data)
退货!
}
@状态变量编号:Int=5
var body:一些观点{
导航视图{
VStack{
形式{

弗雷奇(0..@JoakimDanielson第一个不起作用,第二个起作用。如果在模拟器中运行它,它起作用吗?@JoakimDanielson不起作用,应用程序会打开黑屏并保持不变。然后,很可能在启动它时崩溃,可能找不到或解码json文件。请在Xcode中检查控制台和/或在调试器中运行它。RemoteHumanReadableError:未能更新预览。向代理发送“previewInstances”消息时遇到错误。预览过程似乎已崩溃。这是我在打开diagnostics@JoakimDanielson时遇到的错误