使用 MVVM 模式显示数组中的值的 SwiftUI 问题
SwiftUI problem with displaying values from array using MVVM pattern
我是 swift 和 iOS 开发的新手,我无法在 iPhone 屏幕上显示从 json 文件中获得的值。
型号代码:
import Foundation
struct JSONModel: Codable{
var name: String
var value: String
}
视图模型代码:
import Foundation
class JSONViewModel: ObservableObject{
@Published var resultArray: [JSONModel] = []
init(){
parseJSON()
}
func parseJSON(){
var result: [JSONModel] = [] //empty array
guard let url = Bundle.main.url(forResource:"animals", withExtension: "json") else { return }
do{
let jsonData = try Data(contentsOf: url)
result = try JSONDecoder().decode([JSONModel].self, from: jsonData)
DispatchQueue.main.async {
self.resultArray = result
}
}
catch{
print("Error: \(error)")
}
}
}
ContentView 代码:
import SwiftUI
struct ContentView: View {
@StateObject var viewModel = JSONViewModel()
var body: some View {
NavigationView {
ScrollView {
ForEach(viewModel.resultArray){ item in
Text(item.name)
}
}
}
}
}
我没有收到任何具体错误,唯一 Xcode 显示给我的是:
Failed to produce diagnostic for expression; please submit a bug
report (https://swift.org/contributing/#reporting-bugs) and include
the project
任何帮助将不胜感激
使您的模型符合 Hashable
并使用 .self 来识别它:
struct JSONModel: Codable, Hashable{
var name: String
var value: String
}
ForEach(viewModel.resultArray, id:\.self){ item in
Text(item.name)
}
我是 swift 和 iOS 开发的新手,我无法在 iPhone 屏幕上显示从 json 文件中获得的值。
型号代码:
import Foundation
struct JSONModel: Codable{
var name: String
var value: String
}
视图模型代码:
import Foundation
class JSONViewModel: ObservableObject{
@Published var resultArray: [JSONModel] = []
init(){
parseJSON()
}
func parseJSON(){
var result: [JSONModel] = [] //empty array
guard let url = Bundle.main.url(forResource:"animals", withExtension: "json") else { return }
do{
let jsonData = try Data(contentsOf: url)
result = try JSONDecoder().decode([JSONModel].self, from: jsonData)
DispatchQueue.main.async {
self.resultArray = result
}
}
catch{
print("Error: \(error)")
}
}
}
ContentView 代码:
import SwiftUI
struct ContentView: View {
@StateObject var viewModel = JSONViewModel()
var body: some View {
NavigationView {
ScrollView {
ForEach(viewModel.resultArray){ item in
Text(item.name)
}
}
}
}
}
我没有收到任何具体错误,唯一 Xcode 显示给我的是:
Failed to produce diagnostic for expression; please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project
任何帮助将不胜感激
使您的模型符合 Hashable
并使用 .self 来识别它:
struct JSONModel: Codable, Hashable{
var name: String
var value: String
}
ForEach(viewModel.resultArray, id:\.self){ item in
Text(item.name)
}