任何人都可以解释为什么这在飞机上是不可能的:
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来解决这个问题,但我想理解为什么,因为这看起来像是一个非常重要的泛型用例。
答案 0 :(得分:2)
这似乎是Swift 2中的一个错误,因为它适用于Swift 1.2
作为解决方法,您可以使用通用函数:
class ClassC {
func c<T: ProtocolA>(value: B<T>) {
}
}
修改强>
从Xcode 7 beta 6开始,您会收到一条错误消息:
使用'ProtocolA'作为符合协议的具体类型 不支持“ProtocolA”
所以这应被视为正常行为。