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

时间:2017-09-15 07:48:07

标签: swift rx-swift rx-cocoa

假设我有一些视图最初填充了一些数据。我通过网络获取数据,并希望使用此更新数据更新视图。

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

let dataUpdated: Observable<DataItem> = ...

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

3 个答案:

答案 0 :(得分:3)

如建议的那样,解决方案可能是使用.filter()。我认为这样可以解决您的问题:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这个:

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