Swift - RxSwift的使用詳解15(錯誤處理)

十五、錯誤處理操作(Error Handling Operators)

錯誤處理操作符可以用來幫助我們對 Observable 發出的 error 事件做出響應,或者從錯誤中恢復。

這里我們先自定義一個錯誤枚舉供后面使用:

enum MyError: Error {
    case A
    case B
}

1,catchErrorJustReturn

(1)基本介紹

  • 當遇到 error 事件的時候,就返回指定的值,然后結束。

(2)使用樣例

let disposeBag = DisposeBag()
 
let sequenceThatFails = PublishSubject<String>()
 
sequenceThatFails
    .catchErrorJustReturn("錯誤")
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
sequenceThatFails.onNext("a")
sequenceThatFails.onNext("b")
sequenceThatFails.onNext("c")
sequenceThatFails.onError(MyError.A)
sequenceThatFails.onNext("d")

運行結果如下:

2,catchError

(1)基本介紹

  • 該方法可以捕獲 error,并對其進行處理。
  • 同時還能返回另一個 Observable 序列進行訂閱(切換到新的序列)。

(2)使用樣例

let disposeBag = DisposeBag()
 
let sequenceThatFails = PublishSubject<String>()
let recoverySequence = Observable.of("1", "2", "3")
 
sequenceThatFails
    .catchError {
        print("Error:", $0)
        return recoverySequence
    }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
sequenceThatFails.onNext("a")
sequenceThatFails.onNext("b")
sequenceThatFails.onNext("c")
sequenceThatFails.onError(MyError.A)
sequenceThatFails.onNext("d")

運行結果如下:

3,retry

(1)基本介紹

  • 使用該方法當遇到錯誤的時候,會重新訂閱該序列。比如遇到網絡請求失敗時,可以進行重新連接。
  • retry() 方法可以傳入數字表示重試次數。不傳的話只會重試一次。

(2)使用樣例

let disposeBag = DisposeBag()
var count = 1
 
let sequenceThatErrors = Observable<String>.create { observer in
    observer.onNext("a")
    observer.onNext("b")
     
    //讓第一個訂閱時發生錯誤
    if count == 1 {
        observer.onError(MyError.A)
        print("Error encountered")
        count += 1
    }
     
    observer.onNext("c")
    observer.onNext("d")
    observer.onCompleted()
     
    return Disposables.create()
}
 
sequenceThatErrors
    .retry(2)  //重試2次(參數為空則只重試一次)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

運行結果如下:

RxSwift使用詳解系列
原文出自:www.hangge.com轉載請保留原文鏈接

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容