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