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