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

问题描述 投票:110回答:2

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

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

我无法做出头脑或尾巴。

protocol Observing: Hashable { }

var observers = HashSet<Observing>()
swift generics xcode6 swift-protocols
2个回答
80
投票

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

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

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

Here是一个类似的问题。


8
投票

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

class GenericClass<T: Observing> {
   var observers = HashSet<T>()
}
© www.soinside.com 2019 - 2024. All rights reserved.