为什么协议不能用作swift中泛型类型的类型?

时间:2015-08-12 00:14:21

标签: objective-c swift2

任何人都可以解释为什么这在飞机上是不可能的:

protocol ProtocolA {
    func a()
}

class B<T: ProtocolA> {
}

class ClassC {
    func c(value: B<ProtocolA>) {

    }
}

这会产生以下错误:error: protocol type 'ProtocolA' does not conform to protocol 'ProtocolA' because 'ProtocolA' is not declared @objc。我可以通过将协议声明为@objc来解决这个问题,但我想理解为什么,因为这看起来像是一个非常重要的泛型用例。

1 个答案:

答案 0 :(得分:2)

这似乎是Swift 2中的一个错误,因为它适用于Swift 1.2

作为解决方法,您可以使用通用函数:

class ClassC {
    func c<T: ProtocolA>(value: B<T>) {

    }
}

修改

从Xcode 7 beta 6开始,您会收到一条错误消息:

  

使用'ProtocolA'作为符合协议的具体类型   不支持“ProtocolA”

所以这应被视为正常行为。