Карточка Middle Сеть, Codable и хранение обновлено

Свой init(from:) в Codable

Вопрос

Как вручную декодировать поле, которое приходит то числом, то строкой?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

В init(from decoder:) взять container(keyedBy: CodingKeys.self), попробовать try? c.decode(Int.self, forKey: .id), при неудаче декодировать String и преобразовать.

Ответ

В init(from decoder:) взять container(keyedBy: CodingKeys.self), попробовать try? c.decode(Int.self, forKey: .id), при неудаче декодировать String и преобразовать.

Разбор

Альтернатива: обёртка-тип или property wrapper для таких полей, чтобы не писать init целиком.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.