什么“协议......只能用作通用约束,因为它具有自我或相关的类型要求”是什么意思?

时间:2014-07-24 06:12:19

标签: swift generics xcode6 swift-protocols

我正在尝试创建一个在Swift中键入自定义协议的词典(实际上是HashSet),但它在标题中给出了错误:

  

协议'myProtocol'只能用作通用约束,因为它具有Self或相关类型要求

我无法做出头脑或尾巴。

protocol Observing: Hashable { }

var observers = HashSet<Observing>()

2 个答案:

答案 0 :(得分:78)

协议Observing继承自协议Hashable,后者继承自协议Equatable。协议Equatable具有以下要求:

func ==(lhs: Self, rhs: Self) -> Bool

除了类型约束外,其中包含Self的协议不能在任何地方使用。

Here是一个类似的问题。

答案 1 :(得分:8)

要解决此问题,您可以使用泛型。考虑这个例子:

class GenericClass<T: Observing> {
   var observers = HashSet<T>()
}