首页 文章

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

提问于
浏览
105

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

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

我无法做出头脑或尾巴 .

protocol Observing: Hashable { }

var observers = HashSet<Observing>()

更新:

为了最好的解释,为什么这是check out this video的方式 .


2 回答

  • 8

    协议 Observing 继承自协议 Hashable ,后者又从协议 Equatable 继承 . 协议 Equatable 具有以下要求:

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

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

    Here是一个类似的问题 .

  • 73

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

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

相关问题