Для чего нужен Codable в Swift
Что проверяют
Умеете ли вы работать с данными от сервера дальше простого случая: имена полей не совпадают, даты в своём формате, часть полей отсутствует.
Как отвечать
Codable это псевдоним для пары протоколов Encodable и Decodable. Он позволяет превращать типы в JSON и обратно без ручного разбора словарей. Для простых структур достаточно объявить соответствие, всё остальное компилятор генерирует сам.
Дальше стоит показать реальные случаи, которые и отличают знание от знакомства:
- несовпадение имён: перечисление
CodingKeysсопоставляет свойства с ключами ответа, а для повальногоsnake_caseесть стратегияkeyDecodingStrategy = .convertFromSnakeCase; - даты:
dateDecodingStrategyс ISO 8601 или своим форматтером, иначе дата не разберётся; - необязательные поля: тип-опционал или значение по умолчанию через собственный
init(from:); - вложенность и плоские модели: свой инициализатор с вложенными контейнерами позволяет развернуть ответ в удобную структуру, не повторяя чужую иерархию;
- разнородные ответы: перечисление с ассоциированными значениями и разбор по полю-типу;
- ошибки:
DecodingErrorрассказывает, какого ключа не хватило и какой тип пришёл. Эти сообщения стоит логировать целиком, они экономят часы.
struct Job: Codable {
let id: String
let salaryFrom: Int?
enum CodingKeys: String, CodingKey { case id, salaryFrom = "salary_from" }
}Где спотыкаются
Считают, что Codable разберёт любой ответ. Любое расхождение типов даёт ошибку, и это правильно, но обрабатывать её надо.
Делают все поля опциональными, чтобы «не падало», и получают модель, по которой невозможно понять, что гарантировано.
Пишут разбор вручную там, где хватило бы CodingKeys.