如何在Swift中创建一组委托协议项?

时间:2015-06-17 05:43:09

标签: ios swift

假设我有五个UIView个对象,它们都符合特定的协议。我有一个对象应该维护这些对象的列表,并在必要时向它们发送消息。

protocol MyProtocol: AnyObject {
    func doSomething()
}

问题是,当我将这些UIView添加到Set变量时,编译器会产生错误,因为MyProtocol不符合Hashable。我能理解这个的原因,有人能想出克服这个问题的好方法吗?与此同时,我考虑使用NSHashTable,但是你失去了套装的很好的枚举功能。

更新答案以发布一些示例代码(这仍然无效)

protocol MyProtocol: class, AnyObject {
    func doSomething()
}

class MyClass {
    var observers: Set<MyProtocol> = Set<MyProtocol>()
}

1 个答案:

答案 0 :(得分:0)

在为类定义协议时,您需要在继承任何其他协议之前编写“class”关键字:

    protocol MyProtocol: AnyObject, Hashable{
         func doSomething()
    }


    class MyClass<T: MyProtocol> {

         var observers: Set<T> = Set<T>()
    }

将您的协议更改为此,它将正常工作。 您可以参考Apple Documentation了解更多详情。