Я создаю приложение iOS в Swift и опишу пример Lister, который предоставляет Apple.
Lister использует два объекта модели: List и ListItem. Я обнаружил, что оба они не вызывают super.init()
в своих инициализаторах, хотя они подклассы NSObject.
Однако в версии Lister для Objective-C оба объекта модели (AAPLList и AAPLListItem) вызывают [super init]
.
Язык Swift Programming четко указывает, что "назначенные инициализаторы должны вызывать назначенный инициализатор из своего непосредственного суперкласса". (Правило 1 инициализации в инициализации)
Что здесь происходит? Почему это исключение, и если вы не должны всегда вызывать super.init() в подклассе, какие правила применяются?