Выбор ответа Junior Сеть, Codable и хранение спрашивают часто обновлено

snake_case в JSON и Codable

Вопрос

Сервер присылает {"first_name": "Ира"}, а в модели let firstName: String. Как декодировать без ручного кода для каждого поля?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: decoder.keyDecodingStrategy = .convertFromSnakeCase. Стратегия convertFromSnakeCase переводит ключи firstname в firstName для всех полей.

Варианты ответа

  1. Переименовать свойство в first_name, другого способа нет
  2. decoder.keyDecodingStrategy = .convertFromSnakeCaseправильный ответ
  3. decoder.dateDecodingStrategy = .iso8601 для всей модели
  4. Пометить свойство @objc(first_name), Codable его учтёт

Разбор

Стратегия convertFromSnakeCase переводит ключи first_name в firstName для всех полей. Точечные расхождения решают CodingKeys. Переименовывать свойство в стиле snake_case против соглашений Swift. Стратегия дат к ключам отношения не имеет, а @objc не влияет на Codable.

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

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