从数组

时间:2018-01-28 19:40:04

标签: ios swift

我正在尝试在名为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类的监听器调用完成块。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

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

func removeListener(listener: NetworkStatusListener) {
    listeners = listeners.filter { $0 as AnyObject !== listener as AnyObject }
}

该检查将进行引用检查,因此只要您具有要删除的侦听器的引用就可以正常工作。如果不是,您可以更改过滤器闭包以使用id或其他一些区别因素。