使用RxSwift和MVVM处理错误

时间:2017-05-12 09:46:43

标签: swift mvvm rx-swift

我正在尝试用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)

这对我来说似乎不太清楚。应该采用什么方法?

0 个答案:

没有答案