如何使用 RxSwift Observable<Int>.interval?

Posted

技术标签:

【中文标题】如何使用 RxSwift Observable<Int>.interval?【英文标题】:How to use RxSwift Observable<Int>.interval? 【发布时间】:2017-09-25 04:19:56 【问题描述】:

我正在尝试以给定的时间间隔在“脉冲”上发出序列。对所有 Rx 来说都是全新的,但认为这样做可以:

import RxSwift
let db = DisposeBag()

_ = Observable<Int>.interval(1.0, scheduler: MainScheduler.instance)
    .debug("interval")
    .subscribe(onNext: 
        print($0)
    )
    .addDisposableTo(db)

但它只输出:

2017-09-25 06:12:41.161: interval -> subscribed

仅此而已。我在这里不明白什么?

【问题讨论】:

你的垃圾袋的寿命是多少 - db?不使用此行重试:.addDisposableTo(db) 现在试过了。不管有没有.addDisposable,它似乎都不会发出任何东西。我现在已经在我的操场上添加了完整的代码。处置袋应该是活的。 这真的很奇怪,因为这段代码对我有用 你使用什么版本的 RxSwift? 我认为它是最新的,我的 Podfile 中有这个:pod 'RxSwift', '~&gt; 3.0' 【参考方案1】:

您的代码没有任何问题。处置袋应该是活的。但是,一旦运行最后一条指令,操场执行就会结束,因此会出现问题。

为了让 Playground 在所有内容执行完毕后继续运行,您必须导入 PlaygroundSupport 并告诉页面继续运行:

import RxSwift
import PlaygroundSupport

let db = DisposeBag()

Observable<Int>.interval(1.0, scheduler: MainScheduler.instance)
    .debug("interval")
    .subscribe(onNext: 
        print($0)
    )
    .addDisposableTo(db)

PlaygroundPage.current.needsIndefiniteExecution = true

【讨论】:

在 RxSwift5 中:Observable&lt;Int&gt;.interval(.seconds(1.0), scheduler: ... 如何停止这个计时器? 您创建var timerDisposable: Disposable? 的实例并将Observable&lt;Int&gt;.interval(.seconds(1.0), scheduler: ... 的输出返回到timerDisposable。最后你可以通过调用timerDisposable?.dispose()来停止计时器。

以上是关于如何使用 RxSwift Observable<Int>.interval?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Observable.create (RxSwift) 中返回/转发一个 observable

如何在 RxSwift 中取消订阅 Observable?

在 RxSwift 中,我如何对 observable 未发送任何事件进行单元测试?

使用 Observable 绑定 BehaviorRelay - RxSwift

如何使用 RxSwift Observable<Int>.interval?

如何在 RxSwift 中组合多个 Observable