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

Why can't a protocol not be used as a type for a generic type in swift?

谁能解释一下为什么这在飞机上是不可能的swift:

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 来解决此问题,但我想了解原因,因为对我来说这看起来像是泛型的一个非常重要的用例。

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

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

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

    }
}

编辑

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

using 'ProtocolA' as a concrete type conforming to protocol 'ProtocolA' is not supported

所以这应该被认为是正常行为。