Ich versuche ein Protokoll B zu definieren, das Protokoll A erweitert (das letztere enthält den zugehörigen Typ C), während eine where-Klausel mit derselben Integritätsregel wie der Compiler verwendet wird schlägt vor. Allerdings wird der Code nicht mehr kompiliert. Ist das ein Swift Bug (Swift 4 in diesem Fall)?Schnelle Protokollkonformität mit zugehörigem Typ unter Verwendung derselben Bedingung
Um konkreter zu sein, den Code unten mit Fehler nicht kompilieren:
Typ ‚E‘ entspricht nicht Protokoll ‚A‘
class D {
}
protocol A: class {
associatedtype C: AnyObject
}
protocol B: A where C == D {
}
class E: B {
}
die Definition des Protokolls B ändern, wie unten angegeben kompiliert, sondern stattdessen diese Warnung anzeigen:
typealias zwingende zugehörigen Typ ‚C‘ aus Protokoll ‚A‘ besser als gleichTypEinschränkung auf dem Protokoll ausgedrückt wird
Der einzige Weg, um es ohne Warnungen zu machen zu kompilieren ist die typealias in der Klasse E zu spezifizieren und mit dem where-Klausel in Protokoll B, aber dies scheint die typealias zu duplizieren nicht notwendig:
protocol B: A where C == D {
}
class E: B {
typealias C = D
}
Dank geben! Diese Arbeit scheint es zu beheben. Trotzdem halte ich es für einen Fehler und habe ein Problem im Swift Issue Tracker angemeldet. –