我已经通过跟随名为Reactive Programming with swift的书了解了RxSwift一段时间。有些关于计时器操作员的教程我无法理解
let elementsPerSecond = 1
let delayInSeconds = 2
let sourceObservable = PublishSubject<Int>()
var current = 1
let timer = DispatchSource.timer(interval: 1.0 / Double(elementsPerSecond), queue: .main) {
sourceObservable.onNext(current)
sourceObservable2.onNext(current)
current = current + 1
}
_ = sourceObservable.subscribe(sourceTimeline)
_ = sourceObservable
.delay(RxTimeInterval(delayInSeconds), scheduler: MainScheduler.instance)
.subscribe(delayedTimeline)
_ = Observable<Int>
.timer(RxTimeInterval(0), scheduler: MainScheduler.instance)
.flatMap { _ in
return sourceObservable.delay(RxTimeInterval(delayInSeconds), scheduler: MainScheduler.instance)
}
.subscribe(timerTimeline)
第三个视图是timerTimeline,它落后于第二个时间轴,即delayedTimeline。那么第二个去哪儿了?而且,timerTimeline忽略了第一个元素。我不知道如何使用计时器操作员,任何人都可以告诉我原因,谢谢。
答案 0 :(得分:0)
这确实是一个奇怪的例子,特别是它的前半部分。 至于你的问题,我想错过的第二个是错误(应该是'。timer(RxTimeInterval(1)'),并跳过第一个元素('1'),因为 flatMap( )只有在它已经消失时才被执行。