我正在嘗試從 pokeApi 獲取口袋妖怪名稱,但出現此錯誤:
“沒有與鍵 CodingKeys 關聯的值(stringValue:“index”,intValue:nil)(“index”)。”,underlyingError:nil
import UIKit
class ListViewController: UIViewController {
@IBOutlet weak var pokemon1: UILabel!
@IBOutlet weak var pokemon2: UILabel!
@IBOutlet weak var pokemon3: UILabel!
@IBOutlet weak var pokemon4: UILabel!
@IBOutlet weak var pokemon5: UILabel!
let url = "https://pokeapi.co/api/v2/pokemon"
override func viewDidLoad() {
super.viewDidLoad()
fetchData(from: url)
}
func fetchData(from url: String) {
let url = URL(string: url)
let defaultSession = URLSession(configuration: .default)
let dataTask = defaultSession.dataTask(with: url!) { (data: Data?, response: URLResponse?, error: Error?) in
if(error != nil) {
print(String(describing: error))
return
}
var json: Pokemon
do {
json = try JSONDecoder().decode(Pokemon.self, from: data!)
Swift.print(json)
// DispatchQueue.main.async {
// self.pokemon1.text = json.name
// self.pokemon3.text = json[2].name
// self.pokemon4.text = json[3].name
// self.pokemon5.text = json[4].name
// //callback: fonction que j'appelle à la suite d'un évènement
// }
} catch {
print(error)
return
}
}
dataTask.resume() // Commence la dataTask si elle n'est pas en marche actuellement
}
struct Pokemon: Codable {
let results: Results
}
struct Results: Codable {
let name: String
let index: String
}
}
以下是來自 api 鏈接的資料:
{
"count": 1154,
"next": "https://pokeapi.co/api/v2/pokemon?offset=20&limit=20",
"previous": null,
"results": [
{
"name": "bulbasaur",
"url": "https://pokeapi.co/api/v2/pokemon/1/"
},
{
"name": "ivysaur",
"url": "https://pokeapi.co/api/v2/pokemon/2/"
},
{
"name": "venusaur",
"url": "https://pokeapi.co/api/v2/pokemon/3/"
},
{
"name": "charmander",
"url": "https://pokeapi.co/api/v2/pokemon/4/"
},
{
"name": "charmeleon",
"url": "https://pokeapi.co/api/v2/pokemon/5/"
},
{
"name": "charizard",
"url": "https://pokeapi.co/api/v2/pokemon/6/"
},
{
"name": "squirtle",
"url": "https://pokeapi.co/api/v2/pokemon/7/"
},
{
"name": "wartortle",
"url": "https://pokeapi.co/api/v2/pokemon/8/"
},
{
"name": "blastoise",
"url": "https://pokeapi.co/api/v2/pokemon/9/"
},
{
"name": "caterpie",
"url": "https://pokeapi.co/api/v2/pokemon/10/"
},
{
"name": "metapod",
"url": "https://pokeapi.co/api/v2/pokemon/11/"
},
{
"name": "butterfree",
"url": "https://pokeapi.co/api/v2/pokemon/12/"
},
{
"name": "weedle",
"url": "https://pokeapi.co/api/v2/pokemon/13/"
},
{
"name": "kakuna",
"url": "https://pokeapi.co/api/v2/pokemon/14/"
},
{
"name": "beedrill",
"url": "https://pokeapi.co/api/v2/pokemon/15/"
},
{
"name": "pidgey",
"url": "https://pokeapi.co/api/v2/pokemon/16/"
},
{
"name": "pidgeotto",
"url": "https://pokeapi.co/api/v2/pokemon/17/"
},
{
"name": "pidgeot",
"url": "https://pokeapi.co/api/v2/pokemon/18/"
},
{
"name": "rattata",
"url": "https://pokeapi.co/api/v2/pokemon/19/"
},
{
"name": "raticate",
"url": "https://pokeapi.co/api/v2/pokemon/20/"
}
]
}
我想我的結構有一個錯誤......我真的不知道我是否需要放置一個陣列以及將它放在代碼中的什么位置?
uj5u.com熱心網友回復:
你是對的,你的資料結構中需要一個陣列。results關鍵是針對結果陣列,而不是單個物體。
出于某種原因,您還使用而index不是url.Result
這應該有效(注意:重命名為Results,Result因為它是一個專案)
struct Pokemon: Codable {
let results: [Result]
}
struct Result: Codable {
let name: String
let url: String
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/509968.html
標籤:迅速代码故事板
