【问题标题】:How to use RxSwift Observable<Int>.interval?如何使用 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'

标签: swift rx-swift


【解决方案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()来停止计时器。
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多