【问题标题】:Updating periodically with RxSwift使用 RxSwift 定期更新
【发布时间】:2016-09-06 19:46:48
【问题描述】:

我使用以下设置从 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 方式)。

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

【问题讨论】:

    标签: ios swift rx-swift reactivex moya


    【解决方案1】:

    这与this question/answer非常相似。

    您应该使用timer,然后使用flatMapLatest:

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

    【讨论】:

    • 这太好了,谢谢!鉴于.Issue 需要一个参数(例如.Issue(id: issueId)),如何在flatMapLatest 中引用它(issueId 是一个存储属性)?
    • 在块中使用.flatMapLatest { [weak self] _ in,然后使用self?.issueId。
    • 来自未来的你好!如果您想按顺序处理请求,您可能希望使用concatMap。
    【解决方案2】:

    您可能正在寻找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)
        }
    

    【讨论】:

    • 感谢您的回答。但是如何将其应用于Driver?
    • 看起来间隔也适用于Drivers。我已经更新了之前的例子
    • 很好,但是如何将其应用到我的具体示例中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多