2016-09-02 4 views
2
@objc public protocol P1 { 
    func p1foo() 
} 

@objc public protocol P2 { 
    func p2foo() 
} 

class A<T>: NSObject, P1 { 
    func p1foo() { } 
} 

class B: A<Int> { 

} 

extension B: P2 { 
    func p2foo() { } 
} 

- >タイプ 'B'がプロトコル 'P2'に準拠していません。ジェネリッククラスからの迅速な継承は、拡張を介したプロトコルの適合を防ぎますか?

なぜですか?ジェネリックを削除するとこのエラーは解決されますが、私は理解しません.Bはこの時点で完全固有のタイプでなければなりません...

答えて

1

@objcとジェネリックの組み合わせです。 Objective-CはSwiftジェネリックスを何も知らないので、Bが@objcプロトコルを採用すべきという考え方は、コンパイラーが揺らめくようにします。

これはすでに一方向から検出済みです。他の人からも同じように見ることができます。 @objc属性を削除することにより、コードをコンパイルすることができます。または、ジェネリックを削除してコンパイルすることもできます。一度に両方を持つことはできません。

関連する問題