【问题标题】:RxSwift - How to call method which returns Driver at regular intervals?RxSwift - 如何调用定期返回驱动程序的方法?
【发布时间】:2025-11-27 11:30:01
【问题描述】:

我是一名 RxSwift 初学者,正在使用 RxSwift + MVVM 制作应用程序。

我有一个调用 API 并在 ViewModel 类中转换为 RxCocoa.Driver 的方法,如下所示。

    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()
            })

    }

现在,我想在 ViewController 上定期调用这个 fetchListPlace() 方法,也就是轮询(例如每 5 分钟一次)。

怎么做????

我认为interval 在这种情况下很合适,但我无法获得实现图像....

【问题讨论】:

    标签: swift rx-swift rx-cocoa


    【解决方案1】:

    给你:

    func example(_ fetcher: Fetcher) -> Driver<HomeViewEntity> {
        Driver<Int>.interval(.seconds(5 * 60))
            .flatMap { _ in fetcher.fetch() }
    }
    

    另请注意,

    • 从恢复关闭返回Driver.never() 可能是个坏主意。更喜欢Driver.empty()
    • 首先,我不喜欢在恢复关闭中添加副作用。我认为最好让 fetch() 返回 Driver&lt;Result&lt;HomeViewEntity, Error&gt;&gt; 并将副作用移到链的末尾(在订阅或 flatMap 中)。

    【讨论】: