【发布时间】:2021-05-12 10:32:49
【问题描述】:
我实际上在学习 SwiftUi,目前我没有遇到我的问题。
我尝试从本地 Json 文件加载 Json 数据!
我搜索了很多很多帖子,但没有什么真正帮助我,这就是我选择发表这篇文章的原因。
我告诉你我是如何尝试的。
路径:数据/test.json
[
{
"id": 1,
"name": "",
"trade_name": "",
"short_name": "",
"test": "",
"test1": "",
"test2": "",
"test3": "",
"test4": "",
"test5": "",
"test6": "",
"test7": "",
"test8": [],
"test9": "",
"test10": "",
"test11": "",
"test12": ""
},
]
路径:App/DataLoader.swift
import Foundation
public class DataLoader {
@Published var contentData = [JSONData]()
init(){
load()
sort()
}
func load(){
if let fileLocation = Bundle.main.url(forResource: "test", withExtension: "json"){
do {
let data = try Data(contentsOf: fileLocation)
let jsonDecoder = JSONDecoder()
let dataFromJson = try jsonDecoder.decode([JSONData].self, from: data)
self.contentData = dataFromJson
} catch {
print(error)
}
}
}
func sort(){
self.contentData = self.contentData.sorted(by: { $0.id < $1.id})
}
}
在此文件中,我添加了变量。 路径:App/JsonData.swift
import Foundation
struct JSONData: Codable {
var id: Int
var name: String
var trade_name: String
var short_name: String
var test: String
var test1: String
var test2: [String:String]
var test3: [String:String]
var test4: String
var test5: String
var test6: [String:String]
var test7: String
var test8: [String:String]
var test9: String
var test10: String
var test11: String
var test12: String
}
我还没有设置显示,但我希望它在列表中。 在我的 ContentView.swift 文件中,我将从该 Json 文件加载数据!
路径:App/ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
Home()
.navigationTitle("Test Interface")
.navigationBarTitleDisplayMode(.inline)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct Home : View {
let data = DataLoader().contentData
var body: some View {
data[IndexPath.row].id
}
}
当我这样做时,它会显示一些错误。
属性'body'的返回类型要求'Int'符合'View'
实例成员“行”不能用于类型“索引路径”;您的意思是改用这种类型的值吗?
问候
创建字节
【问题讨论】:
-
在正文视图中应该是
Text("\(data[IndexPath.row].id)")。 -
如果我这样做,它会显示以下错误。实例成员 'row' 不能用于类型 'IndexPath';您的意思是改用这种类型的值吗?
-
是的,因为没有 IndexPath 您需要 ForEach 视图,但现在只需传递任意数字进行测试。
-
我该如何准确地管理这个?我可以简单地制作一个 ForEach 吗?像 ForEach(1...10){ Text(data[name])}