gpt4 book ai didi

ios - API 不在 Swift for iOS 中显示数据

转载 作者:行者123 更新时间:2023-12-04 08:13:24 25 4
gpt4 key购买 nike

当前无法从 API 获取数据以进行显示。
当前代码:

import SwiftUI

struct Response: Decodable {
var content: [Result]
}

struct Result : Decodable {
var code: String
var fire: String
var name: String
var police: String
var medical: String
}

struct ContentView: View {
@State private var content = [Result]()

var body: some View {
List(content, id: \.code) { item in
VStack(alignment: .leading) {
Text(item.name)
.font(.headline)
Text(item.medical)
}
}
.onAppear(perform: loadData)
}
func loadData() {

let url = URL(string: "https://emergency-phone-numbers.herokuapp.com/country/gb")!

URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error { print(error); return }
do {
let decodedResponse = try JSONDecoder().decode(Response.self, from: data!)
// we have good data – go back to the main thread
DispatchQueue.main.async {
// update our UI
self.content = decodedResponse.content
}

} catch {
print(error)
}
}.resume()

}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
当前错误:
2021-01-21 19:21:07.094582+0000 iTunes API [39924:1098972] [] nw_protocol_get_quic_image_block_invoke dlopen libquic 失败
keyNotFound(CodingKeys(stringValue: "content", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: "content", intValue: nil) ("content")”,底层错误:无))
请指教。提前致谢。

最佳答案

请注意内容来自https://emergency-phone-numbers.herokuapp.com/country/gb是:

{"code":"GB","fire":"999","police":"999","name":"United Kingdom","medical":"999"}
问题是没有 content根据您收到的回复, JSONDecoder无法解析响应。您收到的回复似乎包含适合 Result 的内容,所以如果你改变你的代码来解析它,它工作正常:
import SwiftUI

struct Response: Decodable {
var content: [Result]
}

struct Result : Decodable {
var code: String
var fire: String
var name: String
var police: String
var medical: String
}

struct ContentView: View {
@State private var content = [Result]()

var body: some View {
List(content, id: \.code) { item in
VStack(alignment: .leading) {
Text(item.name)
.font(.headline)
Text(item.medical)
}
}
.onAppear(perform: loadData)
}
func loadData() {

let url = URL(string: "https://emergency-phone-numbers.herokuapp.com/country/gb")!

URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error { print(error); return }
do {
let decodedResponse = try JSONDecoder().decode(Result.self, from: data!)
// we have good data – go back to the main thread
DispatchQueue.main.async {
// update our UI
self.content = [decodedResponse]
}

} catch {
print(error)
}
}.resume()

}
}
我猜,最后,你可能想要一个 Result 的集合。 s 适合 content ,因此您可能需要更改该 API 上的某些内容以返回该集合,然后您的代码将可以正常工作。

关于ios - API 不在 Swift for iOS 中显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65834500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com