У меня есть простая модель, которую я определил для декодирования структуры.
Но это не удается при декодировании.
Кто-нибудь может сказать мне, что я делаю неправильно?
struct Model: Codable {
let firstName: String
let lastName: String
let age: Int
enum Codingkeys: String, CodingKey {
case firstName = "first_name"
case lastName = "last_name"
case age
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let session = URLSession.shared
let url = URL(string: "https://learnappmaking.com/ex/users.json")!
let task = session.dataTask(with: url) { (data, response, error) in
let decoder = JSONDecoder()
let d = try! decoder.decode([Model].self, from: data!) //fails here
print(d)
}
task.resume()
}
}
Я дважды проверил, был ли JSON верен, но он все равно не смог расшифровать.
Отображается ошибка
Тема 5: Неустранимая ошибка: 'попробуй!' Выражение неожиданно вызвало ошибку:
Swift.DecodingError.keyNotFound (CodingKeys (stringValue: "firstName",
intValue: nil), Swift.DecodingError.Context (codingPath:
[_JSONKey (stringValue: «Index 0», intValue: 0)], debugDescription: «Нет
значение, связанное с ключом CodingKeys (stringValue: \ "firstName \",
intValue: nil) (\ "firstName \"). ", underError: nil))
Он продолжает искать firstName
, но у меня специально есть перечисление для проверки на first_name
.
Это полезная нагрузка JSON
[
{
"first_name": "Ford",
"last_name": "Prefect",
"age": 5000
},
{
"first_name": "Zaphod",
"last_name": "Beeblebrox",
"age": 999
},
{
"first_name": "Arthur",
"last_name": "Dent",
"age": 42
},
{
"first_name": "Trillian",
"last_name": "Astra",
"age": 1234
}
]
Я знаю, что могу добавить decoder.keyDecodingStrategy = .convertFromSnakeCase
, но я хочу знать, почему не работает существующий код?