假设我有五个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>()
}
答案 0 :(得分:0)
在为类定义协议时,您需要在继承任何其他协议之前编写“class”关键字:
protocol MyProtocol: AnyObject, Hashable{
func doSomething()
}
class MyClass<T: MyProtocol> {
var observers: Set<T> = Set<T>()
}
将您的协议更改为此,它将正常工作。 您可以参考Apple Documentation了解更多详情。