2
プロトコルA(後者は関連する型Cを含む)を拡張するプロトコルBを定義しようとしていますが、コンパイラと同じ型制約示唆している。しかし、これを行うと、コードはもうコンパイルされません。これはSwiftバグですか(この場合、Swift 4)?より具体的には同じ型制約を使用する関連型とのスウィートプロトコルの適合
、以下のコードは、エラーでコンパイルされない:
タイプ「E」は、プロトコルに準拠していない以下の指定されたとおり '
class D {
}
protocol A: class {
associatedtype C: AnyObject
}
protocol B: A where C == D {
}
class E: B {
}
は、プロトコルBの定義を変更しますコンパイルされますが、代わりに、この警告が表示されます:「」より良いプロトコル
で同じタイプの制約として表現されるプロトコルからの関連するタイプ「C」をオーバーライドTypealiasそれは警告なしでコンパイル作る
protocol B: A {
typealias C = D
}
唯一の方法は、クラスEでtypealiasを指定することで、プロトコルBでwhere句を使用して、これはtypealiasが不要な重複しているようだ:
protocol B: A where C == D {
}
class E: B {
typealias C = D
}
感謝を与えるために拡張機能を使用することができます!この回避策はそれを修正するようです。しかし、私はまだそれをバグと見なして、Swift issue trackerに問題を提出しました。 –