假设我有五个UIView
对象,它们都符合特定协议。我有一个对象,该对象应维护这些对象的列表,并在必要时向它们发送所有消息。
protocol MyProtocol: AnyObject {
func doSomething()
}
问题是,当我将这些
UIView
添加到Set变量时,编译器会产生错误,因为MyProtocol
不符合Hashable
。我能理解其原因,有人能想到克服此问题的好方法吗?同时,我考虑改用NSHashTable,但您却失去了Sets的出色枚举功能。更新答案以发布一些示例代码(这仍然无法正常工作)
protocol MyProtocol: class, AnyObject {
func doSomething()
}
class MyClass {
var observers: Set<MyProtocol> = Set<MyProtocol>()
}
最佳答案
当您为类定义协议时,因此您需要在继承任何其他协议之前编写“class”关键字:
protocol MyProtocol: AnyObject, Hashable{
func doSomething()
}
class MyClass<T: MyProtocol> {
var observers: Set<T> = Set<T>()
}
将您的协议更改为此,它将正常工作。
您可以参考Apple Documentation以获得更多详细信息。