ios - 从数组中删除使用闭包的监听器

标签 ios swift

我正在尝试在名为 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/

相关文章:

ios - Swift:自定义部分标题包含用于删除行或仅为该部分的行添加行的按钮

swift - 无法使用 swift SDK 对 aws appsync 的用户进行身份验证

ios - 为定时器添加功能

swift - AdMob 显示测试广告但不显示真实广告 Swift/SwiftUI

swift - 当应用程序进入后台时按钮跳转位置

ios - 从 get 方法获取数据后 reloadData 不起作用

ios - 如何删除特定的 UICollectionViewCell 图像。按下特定图像上的按钮时

ios - Swift (iOS) 插件 - 插件错误中未定义方法 - Cordova

ios - 使用请求正文批量上传图片

ios - CustomTableCell 中的 UICollectionView