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

Отсутствующее поле при декодировании

Вопрос

В модели let avatarURL: URL, а сервер иногда не присылает это поле. Что будет?

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

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

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

Коротко

Правильный ответ: Вся модель не декодируется: DecodingError.keyNotFound. Синтезированный init(from:) для неопционального свойства вызывает decode, который требует ключ.

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

  1. Вся модель не декодируется: DecodingError.keyNotFoundправильный ответ
  2. Поле получит nil, а остальные поля декодируются как обычно
  3. Поле получит пустой URL, Codable подставит значение
  4. Поле пропустится без ошибки, модель создастся без него

Разбор

Синтезированный init(from:) для неопционального свойства вызывает decode, который требует ключ. Для опционального свойства используется decodeIfPresent, и отсутствие ключа даёт nil. Пустых значений по умолчанию Codable не подставляет. Модель декодируется целиком или никак.

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

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