Вы можете использовать containers
в Codable
для получения nested data from JSON
.
Контейнеры = Не требуется объект Wrapper
struct User: Decodable {
var id: Int
enum CodingKeys: String, CodingKey {
case user, id
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
let user = try values.nestedContainer(keyedBy: CodingKeys.self, forKey: .user)
let idStr = try user.decode(String.self, forKey: .id)
id = Int(idStr) ?? 0
}
}
Используя containers
, вы можете сохранить значение id
, используя single object
вместо создания wrapper object
.
Примечание: В JSON
предоставленном вами образцеid
имеет тип String
.Но в определении struct
вы используете id
типа Int
.Код, который я дал, после преобразования String to Int
.Если вы сделали опечатку, используйте значение string
как есть.
Предложение - Используйте id
как Int?
вместо Int
.Лучше не хранить никаких значений, чем мусорных (например, в данном случае 0)