假设我有五个 UIView
对象,它们都符合特定的协议(protocol)。我有一个对象应该维护这些对象的列表,并在必要时向它们发送消息。
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>()
}
最佳答案
因为您正在为类定义协议(protocol),所以您需要在继承任何其他协议(protocol)之前编写“class”关键字:
protocol MyProtocol: AnyObject, Hashable{
func doSomething()
}
class MyClass<T: MyProtocol> {
var observers: Set<T> = Set<T>()
}
将您的协议(protocol)更改为此,它将正常工作。 可以引用Apple Documentation了解更多详情。
关于ios - 如何在 Swift 中创建一组委托(delegate)协议(protocol)项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30883095/