Ответ 1
Несмотря на то, что я не могу найти место в документации, где это описано, происходит то, что инициализатор суперкласса по умолчанию вызывается в конце инициализатора подкласса, если это единственный инициализатор суперкласса, и это wasn 't явно.
NSObject
имеет только инициализатор по умолчанию (init());
, вы можете видеть, что инициализатор суперкласса вызывается в конце инициализатора подкласса, пытаясь ссылаться на self (например. println(self))
в конструкторе, который не вызывает super.init():
Вам не разрешено делать это, потому что класс не полностью инициализирован в этой точке.
Если вы хотите использовать self где-то в конструкторе, объект должен быть полностью сконструирован в этой точке, поэтому вам нужно вызвать super.init()
вручную до этого.