2017-02-15 3 views
0

У меня есть этот RxSwift код в быстром 3Rx Swift простой таймер не работает

let bag:DisposeBag = DisposeBag() 
var sig:Observable<Int>! 
sig = Observable<Int>.interval(1.0, scheduler: MainScheduler.instance) 

sig.subscribe(onNext: { (milsec) in 
    print("Mil: \(milsec)") 
}).addDisposableTo(bag) 

я запускаю этот код при нажатии кнопки повернутыми, но его что-либо на консоли не печатать.

ответ

3

DisposeBag будет распоряжаться вашей подпиской, когда она выходит из сферы действия. В этом случае, это будет сразу после звонка, чтобы подписаться, и это объясняет, почему вы не видите ничего напечатанного на консоли.

Переместить определение контейнера dispose в класс, создающий подписку, и все должно работать нормально.

class MyViewController: UIViewController { 
    let bag:DisposeBag = DisposeBag() 

    dynamic func onButtonTapped() { 
    var sig:Observable<Int>! 
    sig = Observable<Int>.interval(1.0, scheduler: MainScheduler.instance) 

    sig.subscribe(onNext: { (sec) in 
     print("Sec: \(sec)") 
    }).addDisposableTo(bag) 
    } 
} 

На стороне записки, interval ожидает интервал в секундах, поэтому он будет тикать только каждую секунду, как oposed в миллисекундах.

+0

Спасибо, что сейчас работает. –