如何在计时器中设置到期时间(_:期间:调度程序:)

时间:2018-01-10 07:30:01

标签: swift reactive-programming rx-swift

我已经通过跟随名为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)

但结果很奇怪: enter image description here

第三个视图是timerTimeline,它落后于第二个时间轴,即delayedTimeline。那么第二个去哪儿了?而且,timerTimeline忽略了第一个元素。我不知道如何使用计时器操作员,任何人都可以告诉我原因,谢谢。

1 个答案:

答案 0 :(得分:0)

这确实是一个奇怪的例子,特别是它的前半部分。 至于你的问题,我想错过的第二个是错误(应该是'。timer(RxTimeInterval(1)'),并跳过第一个元素('1'),因为 flatMap( )只有在它已经消失时才被执行。