Warum benötigt Swift das Überschreiben des designierten Initialisierers der generischen Superklasse?

9

Gemäß der Dokumentation von Apple benötigt Swift nicht unbedingt das Initialisieren des Initialisierers. In einem folgenden Codebeispiel erbt Bar den Initialisierer von Foo :

%Vor%

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 - Ссылка

    
Nikita Leonov 30.04.2016, 17:16
quelle

2 Antworten

1

Ich habe tatsächlich einen Fehlerbericht zum Erben von der generischen Klasse ausgefüllt:

Es war im November letzten Jahres und hat noch keine Antwort bekommen, also ¯_ (ツ) _ / ¯

    
sunshinejr 30.04.2016 18:26
quelle
1

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.

    
matt 01.05.2016 00:44
quelle