在“Combine iOS”中获取取消订阅的状态

Bil*_*fas 5 ios swift combine

我有一个简单的订阅,其中我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)

Asp*_*eri 7

可以通过处理事件来实现

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)