I use the following setup to retrieve objects (e.g. GitHub issues) from an API. This works fine.
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
}
}
Now I'd like to periodically update the list of issues (e.g., every 20 seconds). I thought about an NSTimer
to accomplish this task, but I guess there might be a clean(er) solution (i.e. in a Rx manner) that I didn't think about.
Any hint in the right direction is highly appreciated.
This is very similar to this question/answer.
You should use timer
and then flatMapLatest
:
Observable<Int>.timer(0, period: 20, scheduler: MainScheduler.instance)
.flatMapLatest { _ in
provider.request(.Issue)
}
.mapArray(Issue.self, keyPath: "issues")
// ...