“Protocol …只能用作通用约束,因为它具有自我或相关types需求”是什么意思?

更新:为了最好的解释为什么这是检查出这个video的方式 。


我试图创build一个字典(实际上是一个HashSet )在Swift中的自定义协议上键入,但它给了我标题中的错误,我不能正面或反面。

protocol Observing: Hashable { } 

 var observers = HashSet<Observing>() 

协议Observinginheritance协议Hashable ,继而从协议Equatableinheritance。 Protocol Equatable具有以下要求:

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

并且包含Self的协议在其内部不能用于除了types约束之外的任何地方。

这是一个类似的问题。

要解决这个问题,你可以使用generics。 考虑这个例子:

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