使用 RxSwift 定期更新

Updating periodically with RxSwift

我使用以下设置从 API 检索对象(例如 GitHub 问题)。这很好用。

let provider: RxMoyaProvider<GitHub>
let issues: Driver<[IssueViewModel]>

init(provider: RxMoyaProvider<GitHub>) {
    self.provider = provider
    issues = provider.request(.Issue)
              .mapArray(Issue.self, keyPath: "issues")
              .asDriver(onErrorJustReturn: [])
              .map { (models: [Issue]) -> [IssueViewModel] in
                  let items = models.map {
                      IssueViewModel(name: [=10=].name,
                          description: [=10=].description
                      )
                  }
                  return items
              }
}

现在我想定期更新问题列表(例如,每 20 秒)。我想过 NSTimer 来完成这个任务,但我想可能有一个我没有想到的干净(呃)解决方案(即以 Rx 方式)。

非常感谢任何正确方向的提示。

您可能正在寻找 interval 操作员。 这是 interval 的循环示例,它将每秒打印 "test" 。 Link 到文档:http://reactivex.io/documentation/operators/interval.html

    var driver: Driver<String> {
        return Driver<Int>.interval(1.0).map { _ in
            return "test"
        }
    }
    driver.asObservable().subscribeNext { (variable) in
        print(variable)
    }

这与 非常相似。

你应该使用 timer 然后 flatMapLatest:

Observable<Int>.timer(0, period: 20, scheduler: MainScheduler.instance)
    .flatMapLatest { _ in
        provider.request(.Issue)
    }
    .mapArray(Issue.self, keyPath: "issues")
    // ...