Я пытаюсь декодировать API из API ниже, но я все еще получаю ошибку ниже:
keyNotFound (CodingKeys (stringValue: "resources", intValue: nil), Swift.DecodingError.Context (codingPath: [_JSONKey (stringValue: "resources", intValue: nil)], debugDescription: "Нет значения, связанного с ключом CodingKeys (stringValue: \" resources \ ", intValue: nil) (\" resources \ "). ", underError: nil))
Адрес API: https://age -of-empires-2-api.herokuapp.com / docs /
Я уже несколько раз пытался просмотреть свои структуры и пробовать код вызова на разных уровнях API, но все еще не могу получить данные.Я также пытался вызывать объекты разных уровней в формате print (resources.XXX).
Это мой первый вызов данных из API:
{
"resources": {
"civilizations": "https://age-of-empires-2-api.herokuapp.com/api/v1/civilizations",
"units": "https://age-of-empires-2-api.herokuapp.com/api/v1/units",
"structures": "https://age-of-empires-2-api.herokuapp.com/api/v1/structures",
"technologies": "https://age-of-empires-2-api.herokuapp.com/api/v1/technologies"
}
}
Это первые двауровни структур:
// MARK: - Resources
struct Resources: Codable {
let resources: [String : ResourcesList]
enum CodingKeys: String, CodingKey {
case resources
}
}
// MARK: - ResourcesList
struct ResourcesList: Codable {
let civilizations: CivilizationList
let units: UnitList
let structures: StructureList
let technologies: TechnologyList
enum CodingKeys: String, CodingKey {
case civilizations, units, technologies, structures
}
}
Ниже этих структур я реализовал модели, указанные на веб-сайте API, например CivilizationList, Civilization и т. д.
Это мой код вызова:
let jsonUrl = "https://age-of-empires-2-api.herokuapp.com/api/v1"
guard let url = URL(string: jsonUrl) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
let dataAsString = String(data: data, encoding: .utf8)
do {
let decoder = JSONDecoder()
let resources = try decoder.decode([String : Resources].self, from: data)
print(resources)
} catch {
print(error)
}
print(dataAsString!)
}.resume()
Я рассмотрел все другие темы здесь об одном и том же коде ошибки, попробовал что-то, но, возможно, что-то очень простое, что мне не хватает, к сожалению, я слишком новичок, чтобы заметить это.Любая помощь приветствуется.