JSON数据未复制到结构中



此api被正确调用,并且没有落入"获取失败";错误行。ContentView结构包含一个底部带有.onPear的标准菜单。使用Xcode调试器,我可以在decodeResponse中看到数据,但在结果中看不到。真的有必要使用@State结果吗?result/UserRates中的一些值将立即被取出并存储在其他地方。我也想使用检索到的日期,但目前我的结果定义保持未定义状态。我假设要从结构中检索数据,它是:UserRates.rates[9].key和UserRates.rates[9].value。试图用print语句读取这些数据会返回错误。

盖伦·史密斯

struct UserRates: Codable {
let rates:[String: Double]   
let base: String
let date: String
}
struct ContentView: View {
@State private var results = UserRates(rates: [:], base: "", date: "")

var body: some View {
... standard menu system in body
.onAppear(perform: loadCurrencies)
}

private func loadCurrencies() {
guard let url = URL(string: "https://api.exchangeratesapi.io/latest?base=USD") else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let decodedResponse = try? JSONDecoder().decode(UserRates.self, from: data) {
// we have good data – go back to the main thread
DispatchQueue.main.async {
// update our UI
**self.results = decodedResponse**
}
return
}
}
// problem if we fail into this
print("Fetch failed: (error?.localizedDescription ?? "Unknown error")")
}.resume()
}
}

我计划将32个String/Double数据对从decodeResponse复制到UserRates结构,然后使用dictionary键/值方法查找11个汇率并将其复制到rateArray。但由于复制总是失败,我决定在decodeResponse结构上使用dictionary键/值方法,并完全跳过UserRate结构直接复制到rateArray。我将来可能会使用更多的汇率,这就是为什么我从我的来源加载所有可用的汇率。rateArray的真正目的是存储汇率的倒数。

盖伦

最新更新