Я очень новичок в использовании swift и декодирования JSON. Я пытаюсь создать приложение типа pokedex и использую канал JSON для чтения.
Канал JSON:
[{
"id": 1,
"name": {
"english": "Bulbasaur",
"japanese": "フシギダネ",
"chinese": "妙蛙种子",
"french": "Bulbizarre"
},
"type": [
"Grass",
"Poison"
],
"base": {
"HP": 45,
"Attack": 49,
"Defense": 49,
"Sp. Attack": 65,
"Sp. Defense": 65,
"Speed": 45
}
},
//More entries
]
Мой подход:
import SwiftUI
import Foundation
import Combine
struct ContentView: View {
@ObservedObject var pokemonInfo = GetData()
var body: some View {
List(pokemonInfo.pokemon){
pokemon in
Text(pokemon.name.english)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct Pokemon: Codable, Identifiable {
public var id: Int
public var name: Name
public var type: [String]
public var base: Base
}
struct Name: Codable {
public var english: String
public var japanese: String
public var chinese: String
public var french: String
}
struct Base: Codable {
public var hp: Int
public var attack: Int
public var defense: Int
public var sp_attack: Int
public var sp_defense: Int
public var speed: Int
enum CodingKeys: String, CodingKey{
case hp = "HP"
case attack = "Attack"
case defense = "Defense"
case sp_attack = "Sp. Attack"
case sp_defense = "Sp. Defense"
case speed = "Speed"
}
}
public class GetData: ObservableObject {
@Published var pokemon = [Pokemon]()
init(){
load()
}
func load(){
let dataUrl = URL(string: "https://raw.githubusercontent.com/fanzeyi/pokemon.json/master/pokedex.json")!
let decoder = JSONDecoder()
URLSession.shared.dataTask(with: dataUrl) {(data,response,error) in
do {
if let d = data {
let decodedLists = try decoder.decode([Pokemon].self, from: d)
DispatchQueue.main.async {
self.pokemon = decodedLists
}
} else {
print("No Data")
}
} catch {
print("Error")
}
}.resume()
}
}
Когда я пытаюсь просто отобразить id каждого покемона в виде списка, каждый запись пуста, что наводит меня на мысль, что я где-то напутал при декодировании канала JSON.