#swift #rx-swift #rx-cocoa
#swift #rx-swift #rx-cocoa
Вопрос:
Я новичок в RxSwift и создаю приложение с помощью RxSwift MVVM.
У меня есть метод, который вызывает API и преобразует в RxCocoa.Драйвер в классе ViewModel, как показано ниже.
func fetch() -> Driver<HomeViewEntity> {
apiUseCase.fetch(query: HomeViewQuery())
.map { data in
HomeViewEntity(userName: data.name,
emailAddress: data.email
}
.asDriver(onErrorRecover: { [weak self] error in
if let printableError = error as? PrintableError {
self?.errorMessageRelay.accept(AlertPayload(title: printableError.title, message: printableError.message))
}
return Driver.never()
})
}
Теперь я хотел бы вызывать этот fetchListPlace()
метод через регулярные промежутки времени, например, опрос (например, каждые 5 минут) в ViewController.
Как это сделать????
Я думаю interval
, что это подходит в данном случае, но я не могу получить изображение реализации….
Ответ №1:
Вот и все:
func example(_ fetcher: Fetcher) -> Driver<HomeViewEntity> {
Driver<Int>.interval(.seconds(5 * 60))
.flatMap { _ in fetcher.fetch() }
}
Также обратите внимание,
- Возврат a
Driver.never()
из вашего закрытия восстановления, вероятно, плохая идея. ПредпочитаюDriver.empty()
вместо этого. - Я не сторонник создания побочного эффекта при закрытии восстановления в первую очередь. Я думаю, было бы лучше
fetch()
Driver<Result<HomeViewEntity, Error>>
вместо этого вернуть a и переместить побочный эффект в конец цепочки (в subscribe или flatMap.)