Выбор ответа Junior Сеть, Codable и хранение спрашивают часто обновлено
snake_case в JSON и Codable
Вопрос
Сервер присылает {"first_name": "Ира"}, а в модели let firstName: String. Как декодировать без ручного кода для каждого поля?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: decoder.keyDecodingStrategy = .convertFromSnakeCase. Стратегия convertFromSnakeCase переводит ключи firstname в firstName для всех полей.
Варианты ответа
- Переименовать свойство в
first_name, другого способа нет decoder.keyDecodingStrategy = .convertFromSnakeCaseправильный ответdecoder.dateDecodingStrategy = .iso8601для всей модели- Пометить свойство
@objc(first_name), Codable его учтёт
Разбор
Стратегия convertFromSnakeCase переводит ключи first_name в firstName для всех полей. Точечные расхождения решают CodingKeys. Переименовывать свойство в стиле snake_case против соглашений Swift. Стратегия дат к ключам отношения не имеет, а @objc не влияет на Codable.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.