Эй, у меня есть этот Json для примера:
{"v":{"value1":1548303671,"value2":"invalid","value3":"invalid"}}
И модель класса:
struct VersionApi: Decodable {
let data: NestedData?
let v: [String:Int?]
enum CodingKeys: String, CodingKey {
case data = "data"
case v = "v"
}
}
При попытке декодирования я получаю это сообщение об ошибке:
debugDescription: "Ожидается декодировать Int, но найдена строка / данные
вместо. ", underError: nil)
Я знаю, что это значит, но я не знаю решения.
Мне нужен словарь с Ints в этом формате: [String:Int?]
. Я пытался написать собственный инициализатор, как это:
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
data = try values.decode(NestedData, forKey: .data)
let vID: [String:Any] = try values.decode([String:Any].self, forKey: .v)
v = try values.decode([String:Int?].self, forKey: .v)
}
Затем я хотел просмотреть словарь, и если Any
не Int
, я бы хотел установить nil
. Но это не работает, поскольку ни один из кандидатов не выдает ожидаемый тип:
Ни один из кандидатов 'декодирования' не приводит к ожидаемому контекстуальному типу результата
'[String: Any]'
Как я могу установить Int в ноль, если значение не является Int?