我正在尝试在名为NetworkManager
的单例类中创建一个侦听器数组,该类具有在发生某些事件时调用的完成块:
typealias NetworkStatusListener = (_ status: Reachability.Connection) -> ()
var listeners = [NetworkStatusListener]()
我添加一个侦听器及其完成块,如下所示:
func addListener(completion: @escaping NetworkStatusListener){
listeners.append(completion)
}
当我想调用侦听器时,我使用此代码:
for listener in listeners {
listener(reachability.connection)
}
我正在从这样的类中添加一个监听器:
NetworkManager.shared.addListener { status in
//...
}
现在当这个类被删除时,我想确保它不会继续尝试为deinited类的监听器调用完成块。我怎么能这样做?
答案 0 :(得分:0)
我的代码中有类似的东西,我写了这样的东西:
func removeListener(listener: NetworkStatusListener) {
listeners = listeners.filter { $0 as AnyObject !== listener as AnyObject }
}
该检查将进行引用检查,因此只要您具有要删除的侦听器的引用就可以正常工作。如果不是,您可以更改过滤器闭包以使用id或其他一些区别因素。