API未在iOS的Swift中显示数据
当前未从API获取要显示的数据 当前代码:API未在iOS的Swift中显示数据,ios,swift,Ios,Swift,当前未从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 Conten
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_协议获取图像块调用dlopen libquic失败
keyNotFound(编码键(stringValue:“内容”,intValue:nil),Swift.DecodingError.Context(编码路径:[],调试说明:“没有与键编码键关联的值(stringValue:“内容”,intValue:nil)(“内容”),“underlyingError:nil))
请告知。提前感谢。请注意,
https://emergency-phone-numbers.herokuapp.com/country/gb
是:
{“code”:“GB”,“fire”:“999”,“police”:“999”,“name”:“ukin”,“medical”:“999”}
问题是您得到的响应上没有内容
,因此JSONDecoder
无法解析响应。您得到的响应似乎包含符合结果的内容,因此,如果您更改代码以解析该内容,它将正常工作:
导入快捷界面
结构响应:可解码{
var内容:[结果]
}
结构结果:可解码{
变量代码:字符串
var-fire:字符串
变量名称:String
警察:绳子
var医疗:字符串
}
结构ContentView:View{
@国家私有变量内容=[结果]()
var body:一些观点{
列表(内容,id:\.code){中的项目
VStack(对齐:。前导){
文本(项目名称)
.font(.headline)
案文(项目.医疗)
}
}
.onAppear(执行:loadData)
}
func loadData(){
让url=url(字符串:https://emergency-phone-numbers.herokuapp.com/country/gb")!
URLSession.shared.dataTask(with:url){data,response,中的错误
如果let error=error{print(error);return}
做{
让decodedResponse=尝试JSONDecoder().decode(Result.self,from:data!)
//我们有很好的数据–回到主线程
DispatchQueue.main.async{
//更新我们的用户界面
self.content=[decodedResponse]
}
}抓住{
打印(错误)
}
}1.简历()
}
}
我想,最后,您可能希望一个结果
集合适合内容
,因此您可能需要更改API上的某些内容以返回该集合,然后您的代码就可以正常工作了