Выбор ответа Middle Типы значений и ссылочные обновлено
Когда пропадает memberwise-инициализатор структуры
Вопрос
В теле struct User { let id: Int; let name: String } объявили свой init(id: Int). Что стало с автоматическим init(id:name:)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Его больше нет; чтобы сохранить его, свой init пишут в extension. Почленный инициализатор генерируется, только если в теле структуры нет своих init.
Варианты ответа
- Он остаётся: Swift генерирует почленный init всегда
- Он остаётся, но становится
privateдля других файлов - Его больше нет; чтобы сохранить его, свой init пишут в extensionправильный ответ
- Он пропадает, и восстановить его можно только написав руками
Разбор
Почленный инициализатор генерируется, только если в теле структуры нет своих init. Если объявить свой init в extension User, автоматический сохранится. Он не становится private (уровень доступа зависит от свойств: при private-свойствах он тоже private, иначе internal). Писать его руками не обязательно, хватает переноса в extension.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Как сделать свой copy-on-write
- Existential container: как хранится any Protocol
- Типы значений и ссылочные типы в Swift
- Оператор === в Swift
- Зачем indirect у enum
- Задача на Swift: стек отмены для текстового поля