我有一个简单的订阅,其中我subject正在发出字符串。只是出于好奇,我想知道我的订阅是否被取消。
据我所知,已取消的管道将不会发送任何完成。有一些方法可以实现这一目标吗?
用例是我可以取消所有订阅并收到此订阅的完成信息。我可以在哪里清理东西并反映这一点。
PlaygroundPage.current.needsIndefiniteExecution = true
var disposeBag: Set<AnyCancellable> = .init()
let subject = PassthroughSubject<String, Never>()
subject.sink(receiveCompletion: { completion in
switch completion {
case .failure(let error):
print("Failed with: \(error.localizedDescription)")
case .finished:
print("Finished")
}
}) { string in
print(string)
}.store(in: &disposeBag)
subject.send("A")
disposeBag.map { $0.cancel() }
subject.send("B")
Run Code Online (Sandbox Code Playgroud)
可以通过处理事件来实现
subject
.handleEvents(receiveCancel: {
print(">> cancelled") // << here !!
})
.sink(receiveCompletion: { completion in
switch completion {
case .failure(let error):
print("Failed with: \(error.localizedDescription)")
case .finished:
print("Finished")
}
}) { string in
print(string)
}.store(in: &disposeBag)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |