Выбор ответа Middle Типы значений и ссылочные обновлено

Когда пропадает memberwise-инициализатор структуры

Вопрос

В теле struct User { let id: Int; let name: String } объявили свой init(id: Int). Что стало с автоматическим init(id:name:)?

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

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

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

Коротко

Правильный ответ: Его больше нет; чтобы сохранить его, свой init пишут в extension. Почленный инициализатор генерируется, только если в теле структуры нет своих init.

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

  1. Он остаётся: Swift генерирует почленный init всегда
  2. Он остаётся, но становится private для других файлов
  3. Его больше нет; чтобы сохранить его, свой init пишут в extensionправильный ответ
  4. Он пропадает, и восстановить его можно только написав руками

Разбор

Почленный инициализатор генерируется, только если в теле структуры нет своих init. Если объявить свой init в extension User, автоматический сохранится. Он не становится private (уровень доступа зависит от свойств: при private-свойствах он тоже private, иначе internal). Писать его руками не обязательно, хватает переноса в extension.

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

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