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

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

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

我对此一无所知。

protocol Observing: Hashable { }


var observers = HashSet<Observing>()
52737 次浏览

协议 Observing继承自协议 HashableHashable继承自协议 Equatable。协议 Equatable有以下要求:

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

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

这里 是一个类似的问题。

为了解决这个问题,你可以使用泛型:

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