【问题标题】:countdown timer by `RxSwift``RxSwift` 的倒数计时器
【发布时间】:2019-09-22 08:01:51
【问题描述】:

我需要一个带有RxSwift 的三十秒计时器。 这是一个重复的问题,但问题没有明确的答案

【问题讨论】:

  • 信息不足。

标签: swift rx-swift


【解决方案1】:

现有答案的更好方法。

let countDown = 15 // 15 seconds 
Observable<Int>.timer(.seconds(0), period: .seconds(1), scheduler: MainScheduler.instance)
        .take(countDown+1)
        .subscribe(onNext: { timePassed in
            let count = self.countDown - timePassed
            print(count)

        }, onCompleted: {
            print("count down complete")
        })

【讨论】:

  • 为什么要在take() +1?
  • @Skoua 用于完成包含 0 的可观察对象。
【解决方案2】:

在我看来,这是一个更清洁的解决方案(Swift 5.3)。 onNext 闭包接收剩余时间,因此无需执行计算。这也使得使用takeUntil 运算符在值等于0 时终止订阅变得更加容易。

let countdown = 30
Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
    .map { countdown - $0 }
    .takeUntil(.inclusive, predicate: { $0 == 0 })
    .subscribe(onNext: { value in
        print(value)
    }, onCompleted: {
        print("completed")
    }).disposed(by: disposeBag)

【讨论】:

    【解决方案3】:

    使用 5.0 版本的 RxSwift 你可以做到:

        Observable<Int>.interval(.seconds(30), scheduler: MainScheduler.instance).bind { timePassed in
    
        }.disposed(by: yourDisposeBag)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2021-10-26
      • 2011-12-19
      • 2015-08-19
      • 2014-12-13
      相关资源
      最近更新 更多