RxSwift - 来自可观察到的忽略错误的驱动程序

Posted

技术标签:

【中文标题】RxSwift - 来自可观察到的忽略错误的驱动程序【英文标题】:RxSwit - driver from observable ignoring errors 【发布时间】:2017-09-15 07:48:06 【问题描述】:

假设我有一些视图最初填充了一些数据。比我通过网络获取数据并想用这些更新的数据更新视图。

此时我想从这个 observable 创建 Driver 来驱动 UI 元素。但是,如果 observable 出现错误,我不想做任何事情,因为视图已经有一些数据,所以我只想忽略这样的错误。 asDriver() 函数想要定义发生错误时应该做什么。这样做可以吗:

let dataUpdated: Observable<DataItem> = ...

let driver = dataUpdated.asDriver(onErrorDriveWith: Driver<DataItem>.empty())

?

【问题讨论】:

【参考方案1】:

正如建议的那样,解决方案可能是使用.filter()。我想这样的事情会解决你的问题:

extension Observable 
    func asDriverIgnoringErrors() -> Driver<E> 
        return self.map  $0 as E? 
            .asDriver(onErrorJustReturn: nil)
            .filterNil()
    

【讨论】:

【参考方案2】:

你为什么不使用catchErrorJustReturn(DataItem())

【讨论】:

因为我不想在发生错误时用空数据填充视图。 您可以使用过滤器或扫描运算符来防止这种情况。 因为驱动程序强迫你观察主线程和共享的副作用(share(replay: 1, scope: .whileConnected)),除了永远不会发出错误。 github.com/ReactiveX/RxSwift/blob/master/Documentation/…【参考方案3】:

试试这个:

extension ObservableType 
    public var asDriverSkippingErrors: Driver<Element> 
        return map  Optional($0) 
            .asDriver(onErrorJustReturn: nil)
            .unwrap()
    

【讨论】:

以上是关于RxSwift - 来自可观察到的忽略错误的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

在 ViewController 中可观察到的单元测试 RxSwift

来自数组的 RxSwift 可观察对象序列

RxSwift:返回一个带有错误的新可观察对象

从可观察到的返回数据的角度 forEach 循环(Firebase 驱动)

RxSwift:将可完成映射到单个可观察?

如何在 RxSwift 中将值附加到观察到的数组