Gemäß der Dokumentation von Apple benötigt Swift nicht unbedingt das Initialisieren des Initialisierers. In einem folgenden Codebeispiel erbt Bar
den Initialisierer von Foo
:
Sobald wir einige generische in Foo
hinzufügen, wie zB class Foo<T> {
Xcode liefert uns einen Fehler Initializer does not override a designated initializer from its superclass
. Gibt es eine Dokumentation oder eine schnelle Evolutionsdiskussion, die erklärt, warum es passiert?
Update. Es scheint, dass Generic keine Hauptursache für Override-Anforderungen ist. Hier ist eine Option, wie man eine Klasse mit generic definiert, die kein Überschreiben des designierten Initializers erfordert:
%Vor%Allerdings gibt es eine weitere interessante Beobachtung des Verhaltens. Definition des Initialisierers wie folgt: Überschreiben der Anforderung:
%Vor%Die lustige Sache ist, dass das Hinzufügen eines weiteren Parameters wie folgt in einen solchen initialisierten Initialisierer dazu führt, dass diese Übersteuerungsanforderung verschwindet:
%Vor%Update 2 . Ich kann keine logische Erklärung für dieses Verhalten finden, an dieser Stelle habe ich es als Compiler-Fehler gemeldet - Ссылка
Es ist eindeutig ein Fehler. Darüber hinaus, obwohl der Fehler ausgelöst durch Unterklassifizieren eines generischen ist, ist seine unmittelbare Ursache der Standardwert. Das kompiliert einfach gut:
%Vor%Aber das ist nicht:
%Vor%Diese Art der willkürlichen Unterscheidung ohne Unterschied ist ein sicheres Anzeichen dafür, dass dies ein Compiler-Bug ist.
Tags und Links generics compiler-errors swift initializer