30. Чем отличается designated инициализатор от convenience?Теория

Дополнительные вопросы

1. Кого вызывает designated инициализатор в наследнике?

2. Может ли convenience инициализатор вызвать инициализатор суперкласса?

3. Почему у класса нет memberwise инициализатора, в отличие от структуры?

Темы

Designated инициализатор отвечает за все хранимые свойства класса. Convenience только сокращает вызов: он обязан вызвать другой инициализатор этого же класса через self.init, и в конце цепочка доходит до designated.

Дополнительные вопросы

1. Designated наследника вызывает designated суперкласса через super.init. Свои свойства он заполняет до этого вызова.

2. Нет. Convenience вызывает только self.init своего класса. До суперкласса доходит уже designated этого класса.

3. У структуры нет наследования, и компилятор может собрать инициализатор по полям. У класса есть цепочка designated и convenience, двухфазная инициализация и наследники. Один автоматический инициализатор по всем полям эту цепочку не закроет.