Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use RxSwift Observable<Int>.interval?

Tags:

swift

rx-swift

I'm trying to emit a sequence on a ”pulse” at a given time interval. Totally new to everything Rx, but thought this would do it:

import RxSwift
let db = DisposeBag()

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

But it only outputs:

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

And nothing more. What am I not understanding here?

like image 496
PEZ Avatar asked Sep 25 '17 04:09

PEZ


People also ask

What is observable interval?

Interval Method (TimeSpan) Returns an observable sequence that produces a value after each period. Namespace: System.Reactive.Linq.

What is observable RxSwift?

The heart of the RxSwift framework is based on observable which is also known as a sequence. Observable is the sequence of data or events which can be subscribed and can be extended by applying different Rx operators like map, filter, flatMap, etc. It can receive data asynchronously.


1 Answers

There is nothing wrong with your code. The dispose bag is alive as it should be. However, the playground execution ends as soon as the last instruction is run, hence the problem.

In order to tell the playground to continue running after everything was executed, you have to import PlaygroundSupport and tell the page to continue running:

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
like image 52
iska Avatar answered Oct 23 '22 07:10

iska