Выбор ответа Junior Сеть, Codable и хранение спрашивают часто обновлено
Отсутствующее поле при декодировании
Вопрос
В модели let avatarURL: URL, а сервер иногда не присылает это поле. Что будет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вся модель не декодируется: DecodingError.keyNotFound. Синтезированный init(from:) для неопционального свойства вызывает decode, который требует ключ.
Варианты ответа
- Вся модель не декодируется:
DecodingError.keyNotFoundправильный ответ - Поле получит
nil, а остальные поля декодируются как обычно - Поле получит пустой URL, Codable подставит значение
- Поле пропустится без ошибки, модель создастся без него
Разбор
Синтезированный init(from:) для неопционального свойства вызывает decode, который требует ключ. Для опционального свойства используется decodeIfPresent, и отсутствие ключа даёт nil. Пустых значений по умолчанию Codable не подставляет. Модель декодируется целиком или никак.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.