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