RxSwift — Как вызвать метод, который возвращает драйвер через регулярные промежутки времени?

#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.)