我试图在Swift中创建一个自定义协议的字典(实际上是HashSet),但是它给了我标题中的错误:
协议'myProtocol'只能用作通用约束,因为它具有Self或相关类型要求
我无法做出头脑或尾巴。
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
协议Observing
继承自协议Hashable
,后者继承自协议Equatable
。协议Equatable
有以下要求:
func ==(lhs: Self, rhs: Self) -> Bool
除了类型约束之外,在其中某处包含Self
的协议不能在任何地方使用。
Here是一个类似的问题。
要解决这个问题,您可以使用泛型。考虑这个例子:
class GenericClass<T: Observing> {
var observers = HashSet<T>()
}