Swift JSON编码问题

Swift JSON编码问题,json,swift,encode,Json,Swift,Encode,我试图在swift中解码一些JSON,但我一直得到一个错误,我假设这是因为我的结构编写不正确。有什么想法吗?我正在调用这个API 以下是json解码调用: func fetchPokemonImages() { for var pokemons in self.Pokemons { let defaultSession = URLSession(configuration: .default)

我试图在swift中解码一些JSON,但我一直得到一个错误,我假设这是因为我的结构编写不正确。有什么想法吗?我正在调用这个API

以下是json解码调用:

func fetchPokemonImages() {
        
        for var pokemons in self.Pokemons {
            
            let defaultSession = URLSession(configuration: .default)
            if let url = URL(string: pokemons.url) {
              let request = URLRequest(url: url)
              let dataTask = defaultSession.dataTask(with: request) { (data, response, error) in
                guard let pokemonImage = try? JSONDecoder().decode(PokemonImageList.self, from: data!) else {
                  print(error)
                  return
                }
                DispatchQueue.main.async {
                    
                    self.PokemonsImage.append(contentsOf: pokemonImage.sprites)
                    self.PokemonTableView.reloadData()             }
              }
                dataTask.resume()
            }
        }
    }
以下是我的结构:

struct PokemonImage: Codable {
    let back_default: String

    enum CodingKeys: String, CodingKey {
        case backDefault = "back_default"
    }

    init(backDefault: String) {
        self.backDefault = backDefault
    }

    init(from decoder: Decoder) throws {
        let postsContainer = try decoder.container(keyedBy: CodingKeys.self)
        backDefault = try postsContainer.decode(String.self, forKey: .backDefault)
    }
}

struct PokemonImageList: Codable {
    
    let sprites: [PokemonImage]

    enum CodingKeys: String, CodingKey {
        case sprites
    }
}

从API中,您的共享
精灵
是一个对象,而不是数组

"sprites": {
        "back_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png",
        "back_female": null,
        "back_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/1.png",
        "back_shiny_female": null,
        "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png",
        "front_female": null,
        "front_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/1.png",
        "front_shiny_female": null,
        "other": {
            "dream_world": {
                "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/1.svg",
                "front_female": null
            },
            "official-artwork": {
                "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/1.png"
            }
        }
struct PokemonImageList: Codable {
    
    let sprites: PokemonImage

    enum CodingKeys: String, CodingKey {
        case sprites
    }
}
所以PokemonImageList中的精灵应该是一个对象,而不是数组

"sprites": {
        "back_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png",
        "back_female": null,
        "back_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/1.png",
        "back_shiny_female": null,
        "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png",
        "front_female": null,
        "front_shiny": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/1.png",
        "front_shiny_female": null,
        "other": {
            "dream_world": {
                "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/1.svg",
                "front_female": null
            },
            "official-artwork": {
                "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/1.png"
            }
        }
struct PokemonImageList: Codable {
    
    let sprites: PokemonImage

    enum CodingKeys: String, CodingKey {
        case sprites
    }
}

错误消息是什么?为什么您仍在执行
try?
而不是
try
?您是否知道解码失败时打印的错误是闭包的参数,因此与解码无关。我认为这可能是问题所在,谢谢。我现在有另一个错误,与将可编码对象
pokemonImage
附加到数组
pokemonismage
有关。(实例方法“append(contentsOf:)”要求“PokemonImage”符合“Sequence”)使用append(unewelement:Element)来追加1个对象,append(contentsOf:)用于追加数组