Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从数组中删除使用闭包的侦听器_Ios_Swift - Fatal编程技术网

Ios 从数组中删除使用闭包的侦听器

Ios 从数组中删除使用闭包的侦听器,ios,swift,Ios,Swift,我正在尝试在名为NetworkManager的单例类中创建一个侦听器数组,该类有一个完成块,在发生某些事情时调用该完成块: typealias NetworkStatusListener = (_ status: Reachability.Connection) -> () var listeners = [NetworkStatusListener]() 我添加了一个带有完成块的侦听器,如下所示: func addListener(completion: @escaping Netwo

我正在尝试在名为
NetworkManager
的单例类中创建一个侦听器数组,该类有一个完成块,在发生某些事情时调用该完成块:

typealias NetworkStatusListener = (_ status: Reachability.Connection) -> ()
var listeners = [NetworkStatusListener]()
我添加了一个带有完成块的侦听器,如下所示:

func addListener(completion: @escaping NetworkStatusListener){
    listeners.append(completion)
}
NetworkManager.shared.addListener { status in
    //...
}
func removeListener(listener: NetworkStatusListener) {
    listeners = listeners.filter { $0 as AnyObject !== listener as AnyObject }
}
当我想调用侦听器时,我使用以下代码:

for listener in listeners {
    listener(reachability.connection)
}
我正在添加一个来自如下类的侦听器:

func addListener(completion: @escaping NetworkStatusListener){
    listeners.append(completion)
}
NetworkManager.shared.addListener { status in
    //...
}
func removeListener(listener: NetworkStatusListener) {
    listeners = listeners.filter { $0 as AnyObject !== listener as AnyObject }
}

现在,当这个类被Denited时,我想确保它不会一直尝试调用Denited类的侦听器的完成块。我该怎么做呢?

我的代码中有类似的东西,我写了这样的东西:

func addListener(completion: @escaping NetworkStatusListener){
    listeners.append(completion)
}
NetworkManager.shared.addListener { status in
    //...
}
func removeListener(listener: NetworkStatusListener) {
    listeners = listeners.filter { $0 as AnyObject !== listener as AnyObject }
}

该检查将执行引用检查,因此只要您有侦听器的引用来删除,该检查就可以正常工作。如果没有,您可以将筛选器闭包更改为使用id或其他一些区别因素。

数组有一个
remove(at:)
方法来删除其元素。。但我想你知道这一点。试着更具体地说明你想做什么achieve@MilanNos我更新了它,希望它更具体