Combine:取消平面映射的Timer.publisher



假设我有

let stream = PassthroughSubject<String?, Never>()
let repeated = stream.flatMap { value in Timer.publish(every: 3, on: .main, in: .default).autoconnect() }

我想实现的是使用Timer.publish函数,如果,每3秒做一次特定的操作value != nil,当stream排放为nil时停止。

第一部分很容易实现,一旦主题发出nil,我如何杀死平面映射发布者?

你需要映射,然后switchtollatest…这样的:

let stream = PassthroughSubject<String?, Never>()
let repeated = stream.map { value in
value == nil
? Empty().eraseToAnyPublisher()
: Timer.publish(every: 3, on: .main, in: .default).autoconnect().eraseToAnyPublisher()
}
.switchToLatest()

最新更新