我正在尝试创建一个以 Swift 中的自定义协议为键的 Dictionary (实际上是一个HashSet),但它给了我标题中的错误:
协议“myProtocol”只能用作通用约束,因为它具有 Self 或关联的类型要求
而且我无法确定它的正面或反面。
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
我正在尝试创建一个以 Swift 中的自定义协议为键的 Dictionary (实际上是一个HashSet),但它给了我标题中的错误:
协议“myProtocol”只能用作通用约束,因为它具有 Self 或关联的类型要求
而且我无法确定它的正面或反面。
protocol Observing: Hashable { }
var observers = HashSet<Observing>()
协议Observing
继承自协议Hashable
,协议又继承自协议Equatable
。协议Equatable
有以下要求:
func ==(lhs: Self, rhs: Self) -> Bool
并且包含Self
在其中某处的协议不能在除类型约束之外的任何地方使用。
这是一个类似的问题。
要解决这个问题,您可以使用泛型。考虑这个例子:
class GenericClass<T: Observing> {
var observers = HashSet<T>()
}