从 URL 下载嵌套的 JSON 并使可观察对象 SwiftUI,错误:"Missing Argument for parameter 'from' in call"



我试图从URL下载一个嵌套的JSON文件。我想让它成为可观察对象,这样我的应用程序将更新它的视图,当下载完成。这里我有我的结构和我创建的类,为了使它成为一个可观察对象。这也是我的错误所在:call"中parameter 'from'中缺少参数出现:(Thanks for any help!)

struct SpotDetail: Codable {

var spot: String
var day0: DayDetail
var day1: DayDetail
var day2: DayDetail

enum CodingKeys: String, CodingKey {
case spot = "spot"
case day0 = "day0"
case day1 = "day1"
case day2 = "day2"
}
}
struct DayDetail: Codable {
var date: String
var wind: [Int]
var gust: [Int]

enum CodingKeys: String, CodingKey {
case date = "date"
case wind = "wind"
case gust = "gust"

}
}
class networkSpotData: ObservableObject {
let objectWillChange = ObjectWillChangePublisher()

var WindSpot = SpotDetail() { // ERROR: "Missing Argument for parameter 'from' in call"
willSet {
self.objectWillChange.send()
}
}
}

和从URL下载的函数:

extension ContentView {
func loadspotdata(url: String)  {
guard let url = URL(string: "https://raw.githubusercontent.com/Bene2907/Bene2907.github.io/main/template.json") else {
return
}

let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in

if let data = data {
if let response_obj = try? JSONDecoder().decode(SpotDetail.self, from: data) {

DispatchQueue.main.async {
spotData.WindSpot = response_obj
}
}
}

}.resume()
}

}

最后我有我的视图来显示数据:

struct ContentView: View {

@ObservedObject var spotData = networkSpotData()

var body: some View {
VStack {
Text("(spotData.WindSpot.spot)")
.padding()

Text("(spotData.WindSpot.day0.date)")
.padding()
}.onAppear(perform: {
loadspotdata()
})

}
}

中使用默认构造函数
var WindSpot = SpotDetail() { // ERROR: "Missing Argument for parameter 'from' in call"

你必须在SpotDetail中使用默认值初始化属性,比如

struct SpotDetail: Codable {

var spot: String = ""
var day0: DayDetail = DayDetail() // this also should be initialised properties
...    
}

相关内容

最新更新