在基于json的结构数组中迭代会导致预览失败
代码从list.json获取json数据,我创建了一个swift view BookView作为另一个文件在基于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]{
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时遇到的错误