5

我使用以下设置从 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: $0.name,
                          description: $0.description
                      )
                  }
                  return items
              }
}

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

任何正确方向的提示都受到高度赞赏。

4

2 回答 2

13

这与这个问题/答案非常相似。

您应该使用timer然后flatMapLatest

Observable<Int>.timer(0, period: 20, scheduler: MainScheduler.instance)
    .flatMapLatest { _ in
        provider.request(.Issue)
    }
    .mapArray(Issue.self, keyPath: "issues")
    // ...
于 2016-09-07T07:59:34.567 回答
3

您可能正在寻找interval运营商。这是一个循环示例interval,它将每秒保持打印“测试”。文档链接: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)
    }
于 2016-09-06T20:38:57.813 回答