ios - 如何取消Set <AnyCancellable>中的某个特定AnyCancellable?

标签 ios swift macos combine

我有一个URLSession.shared.dataTaskPublisher,我将其存储在AnyCancellable -s中。当我收到一个值并完成后,我希望将此AnyCancellable从集合中删除。

如何识别此特定AnyCancellable,以及如何将其删除?或处理这些案件的最佳方法是什么?我检查了一下,一旦收到完成值,它不会自动从包中取出。

class RandomClass {
    private var cancellableBag: Set<AnyCancellable>()

    func someMethod() {
        let request = URLRequest(...)
        URLSession.shared.dataTaskPublisher(for: request)
            .sink(...)
            .store(in: &self.cancellableBag)
    }
}

最佳答案

这是可能的方法。经过Xcode 11.4测试

class RandomClass {
    private var cancellableBag = Set<AnyCancellable>()

    func someMethod() {
        let request = URLRequest(...)

        var cancellable: AnyCancellable? = nil
        cancellable = URLSession.shared.dataTaskPublisher(for: request)
            // .. other operators here
            .sink(receiveValue: {[weak self] value in
                // ... process value here
                self?.cancellableBag.remove(cancellable!)  // << remove !!
            })
        self.cancellableBag.insert(cancellable!)     // << store !!
    }

关于ios - 如何取消Set <AnyCancellable>中的某个特定AnyCancellable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61540292/

相关文章:

ios - 移动时修改 SKNode 的属性

macos - Mac OSX Unix Bash 脚本将文件夹中的所有文件整理到一个文本文件中,最好在文件顶部有一个标签

xcode - Mac 10.6+ 和 Xcode 4+ 上的 CPU Affinity

ios - 从 Storyboard添加 GMSMapView 时获取 nil

ios - 如何让用户在我的应用程序中进行绘图?

ios - 如何根据语言环境显示小数点但不显示小数点?

xcode - Swift JSON for-in 循环

macos - 在 Automator 中将图像调整为特定的像素宽度和高度

iphone - 获取 UITextView 键盘的 y 值

iphone - NSMutableData 响应字符串