使用 NSHashTable 在 Swift 3 中实现观察者模式



添加多个委托而不是只有一个委托是一项非常常见的任务。假设我们有协议和一个类:

protocol ObserverProtocol
{
   ...
}
class BroadcasterClass
{
    // Error: Type 'ObserverProtocol' does not conform to protocol 'AnyObject'
    private var _observers = NSHashTable<ObserverProtocol>.weakObjects()
}

如果我们尝试强制ObserverProtocol符合AnyObject协议,我们将得到另一个错误:

不支持使用"ObserverProtocol"作为符合协议"AnyObject"的具体类型

是否可以在 Swift 3.0 中创建一组弱委托?

当然,这是可能的。

AnyObject 相当于 Objective C 中的 id。要编译代码,您只需要将@objc注释添加到协议中,告诉 Swift 该协议应该与 Objective C 兼容。

所以:

@objc protocol ObserverProtocol {
}

最新更新