如何解决MacOS - 使用 JSON 数组将条目添加到 SwiftUI 列表
前段时间,我问了一个涉及解码 JSON 的 question。我正在使用此 JSON 在列表中创建一个条目并决定是否勾选复选框。 我之前的问题询问了如何解码 JSON,我有这个看起来很有用的代码(如下),但老实说,我不知道该怎么做。
我会将它放在 SwiftUI 文件中的哪个位置,以便我可以遍历 this 数组中的每个 JSON 片段并将条目添加到 SwiftUI 中?
我有使用 Python 的经验,我了解它应该如何完成,但我是 swift 的初学者......
我的代码:
struct Mod: Decodable {
let id: String
let display: String
let description: String
let url: String?
let config: Bool?
let enabled: Bool?
let hidden: Bool?
let icon: String?
let categories: [String]?
// let actions: Array<OptionAction>?
// let warning: ActionWarning?
}
let modsURL = URL(string: "https://raw.githubusercontent.com/nacrt/SkyblockClient-REPO/main/files/mods.json")!
let task = URLSession.shared.dataTask(with: url) { (data,_,error) in
if let error = error { print(error); return }
do {
let result = try JSONDecoder().decode([Mod].self,from: data!)
print(result)
} catch {print(error)}
}
task.resume()
let mods_test: () = importJSON(url: modsURL)
let enableds = mods_test.map {$0.enabled}
如果这个问题有什么问题,请告诉我!预先感谢您的帮助。
解决方法
在这里,你怎么能做到这一点,
你可以使用State
来声明变量
struct ContentView: View {
//Declare variable
@State var jsonDataList = [jsonData]()
var body: some View {
VStack {
List(jsonDataList,id: \.id) { jsonDataList in
VStack(alignment: .leading) {
HStack {
VStack(alignment: .leading) {
Text(jsonDataList.id)
.font(.title3)
.fontWeight(.bold)
Text(jsonDataList.display)
.font(.subheadline)
.fontWeight(.bold)
}
Spacer()
Image(systemName: jsonDataList.enabled ?? false ? "checkmark.square": "square")
}
}
}
.onAppear(perform: loadData)
}
}
//MARK: - Web Service
func loadData() {
guard let modsURL = URL(string: "https://raw.githubusercontent.com/nacrt/SkyblockClient-REPO/main/files/mods.json") else {
print("Invalid URL")
return
}
let task = URLSession.shared.dataTask(with: modsURL) { (data,_,error) in
if let error = error { print(error); return }
do {
let result = try JSONDecoder().decode([jsonData].self,from: data!)
jsonDataList = result
print("Response:",jsonDataList)
} catch {
print(error)
}
}
task.resume()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
// MARK: - Data Model
struct jsonData: Codable,Identifiable {
let id: String
let display: String
let description: String
let url: String?
let config: Bool?
let enabled: Bool?
let hidden: Bool?
let icon: String?
let categories: [String]?
}
响应截图:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。