来自泛型类的swift继承是否会通过扩展来阻止协议一致性?

时间:2016-09-02 16:39:17

标签: swift

@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() { }
}

- &GT;类型'B'不符合协议'P2'。

为什么呢?删除泛型解决了这个错误,但我不明白 - 此时B应该是一个完全特定的类型......

1 个答案:

答案 0 :(得分:2)

这是@objc和通用的组合。 Objective-C对Swift泛型一无所知,所以B你应该采用@objc协议的概念会导致编译器抖动。

你已经从一个方向检测到了这个;你可以从另一个看到它。您可以通过删除@objc属性来编译代码。或者你可以通过删除泛型来编译它。你不能同时拥有这两个。