如何取消 Set<AnyCancellable> 中的某个 AnyCancellable?
How do I cancel one certain AnyCancellable in a Set<AnyCancellable>?
我有一个 URLSession.shared.dataTaskPublisher
,我将其存储在一组 AnyCancellable
-s 中。当我收到一个值并完成后,我希望将此 AnyCancellable 从 Set 中删除。
如何识别这个特定的 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 !!
}
我有一个 URLSession.shared.dataTaskPublisher
,我将其存储在一组 AnyCancellable
-s 中。当我收到一个值并完成后,我希望将此 AnyCancellable 从 Set 中删除。
如何识别这个特定的 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 !!
}