我正在尝试用RxSwift和MVVM组建一个很好的架构。我想知道如何正确处理来自observable的错误。
我的ViewModel看起来像:
class MapViewModel {
private let disposeBag = DisposeBag()
private let listObservable: Observable<[MyObject]>
let list: Variable<[MyObject]>
let showError: Variable<Bool>
init() {
self.listObservable = getObservable().shareReplay(1)
self.list = Variable<[MyObject]>([])
self.listObservable
.bind(to: list)
.addDisposableTo(self.disposeBag)
self.showError = Variable<Bool>(false)
self.listObservable
.subscribe(
onError: { [weak self] error in
print("Error downloading: \(error)")
self?.showError.value = true
}).addDisposableTo(disposeBag)
}
}
我认为应该纠正这样做的方法:清除关注点的分离,并共享observable以防止多次调用REST端点。
然而,当我这样做 - 并且observable发送错误 - 我从RxSwift得到一个fatalError,因为bind()
调用中没有处理错误。
要解决此问题,我将代码更改为:
self.listObservable
.subscribe(
onNext: { [weak self] list in
self?.list.value = list
},
onError: { [weak self] error in
print("Error downloading: \(error)")
self?.showError.value = true
}).addDisposableTo(disposeBag)
这对我来说似乎不太清楚。应该采用什么方法?