【问题标题】:How do I cancel one certain AnyCancellable in a Set<AnyCancellable>?如何取消 Set<AnyCancellable> 中的某个 AnyCancellable?
【发布时间】:2020-05-01 09:58:31
【问题描述】:

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

如何识别某个 AnyCancellable 以及如何删除它?或者处理这些情况的最佳方法是什么?我检查了一下,一旦我收到完成值,它不会自动从包中取出。

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

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

【问题讨论】:

    标签: ios swift macos combine


    【解决方案1】:

    这是可能的方法。使用 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 !!
        }
    

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多