2016-12-16 1 views
3

나는 RxSwift로 간단한 타이머를 재현하려고합니다.rxSwift가있는 간단한 타이머

일시 중지/다시 시작하기 위해 작동하는 일시 중지/재생 버튼 만 있습니다.

 gameTimer = Observable<NSInteger>.interval(1, scheduler: MainScheduler.instance) 
      .subscribeNext({ sec -> Void in 
      print("\(sec) s") 
     }).addDisposableTo(disposeBag!) 


      pauseResumeButton.rx_tap 
      .map{ !self.isRunning.value } 
      .startWith(true) 
      .bindTo(isRunning) 
      .addDisposableTo(disposeBag!) 

isRunning은 분명히 변수입니다. 타이머 설정 disposeBag = nil을 멈출 수는 있지만 일시 중지 할 수는 없습니다. 이벤트를 필터링하기 위해 반복되었지만 카운트가 계속 증가합니다 ...

아무도 도와 줄 수 있습니까? 감사!

답변

5

약간의 트릭 :

class ViewController: UIViewController { 

    let isRunning = Variable(true) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     isRunning.asObservable() 
      .debug("isRunning") 
      .flatMapLatest { isRunning in 
       isRunning ? Observable<Int>.interval(1, scheduler: MainScheduler.instance) : .empty() 
      } 
      .flatMapWithIndex { (int, index) in Observable.just(index) } 
      .debug("timer") 
      .subscribe() 
      .addDisposableTo(disposeBag) 

     navigationItem.rightBarButtonItem!.rx.tap 
      .subscribe(onNext: { [unowned self] in 
       self.isRunning.value = !self.isRunning.value 
      }) 
      .addDisposableTo(disposeBag) 

    } 
} 

결과 :

2016-12-17 20:53:11.408: timer -> subscribed 
2016-12-17 20:53:11.414: isRunning -> subscribed 
2016-12-17 20:53:11.415: isRunning -> Event next(true) 
2016-12-17 20:53:12.503: timer -> Event next(0) 
2016-12-17 20:53:13.488: timer -> Event next(1) 
2016-12-17 20:53:14.488: timer -> Event next(2) 
2016-12-17 20:53:15.488: timer -> Event next(3) 
2016-12-17 20:53:16.154: isRunning -> Event next(false) 
2016-12-17 20:53:23.155: isRunning -> Event next(true) 
2016-12-17 20:53:24.223: timer -> Event next(4) 
2016-12-17 20:53:25.229: timer -> Event next(5) 
2016-12-17 20:53:26.228: timer -> Event next(6) 
2016-12-17 20:53:27.220: timer -> Event next(7) 
2016-12-17 20:53:28.225: timer -> Event next(8) 
2016-12-17 20:53:29.221: timer -> Event next(9) 
2016-12-17 20:53:29.971: isRunning -> Event next(false) 
+0

덕분에 너무 많은 ... 그것은 좋은 작품! – jerrygdm