Buduję aplikację na iOS w Swift i rysuję na przykładowym projekcie Apple dostarczonym przez Lister.Wywołanie super.init() w inicjatorze podklasy NSObject w Swift
Lister używa dwóch obiektów modelu: List i ListItem. Zauważyłem, że oba nie wywołują super.init()
w swoich inicjalizatorach, nawet jeśli podklasują NSObject.
Jednak w wersji Listera programu Objective-C oba obiekty modelu (AAPLList i AAPLListItem) wywołują [super init]
.
Swift Programming Language wyraźnie stwierdza, że „wyznaczone inicjalizatory musi zadzwonić do wyznaczonego inicjator z ich bezpośrednim nadrzędnej.” (Reguła 1 initializer Chaining w inicjalizacji)
Co tu się dzieje? Dlaczego jest to wyjątek i jeśli nie powinieneś zawsze wywoływać super.init() w podklasie, jakie zasady obowiązują?