json - 基于 json 遍历结构数组导致预览失败
问题描述
该代码从 list.json 获取 json 数据,我创建了一个快速视图 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 语句中的差异)。注意我将 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(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")
}
}
解决方案
推荐阅读
- angular - 实现可重用 Angular 反应式“子表单”的正确方法
- android - Kotlin 扩展在 Firebase Crashlytics 中引发 NullPointerException
- java - Java:对象构造/初始化可以推迟吗?
- ibm-cloud - 如何更改 IBM Cloud 界面语言?
- python - 将分组条形图与截断折线图相结合
- java - 使用 JDBC 和 MongoDB 查询存储在 String 中的日期
- javascript - PyMiniRacer 将 Python 类添加到 JS 范围
- laravel - Laravel whereIn 仅返回每个项目
- openssl - 是否可以在同一个项目中包含 PolarSSL 和 OpenSSL?
- mysql - Kubernetes - 有状态集 mysql - 它如何同步?