RxSwift、RxBlocking、RxTest初嘗試

在Android開發上,RxJava已是很是重要的組成之一。最近在用Swift開發iOS應用,考慮在架構設計上使用RxSwift。網絡

添加依賴
# Podfile
use_frameworks!

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift', '~> 5'
    pod 'RxCocoa', '~> 5'
    pod 'RxBlocking', '~> 5'
end

# RxTest and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
    
    pod 'RxTest', '~> 5'
end
建立 Observable
import RxSwift
...

let observable = Observable<Int>.create { (observer) -> Disposable in
    observer.onNext(1)
    observer.onCompleted()
    return Disposables.create()
}
定義 onError調用
struct MyError:Error {
    var message = ""
    init(message:String) {
        self.message = message
    }
}
let observable = Observable<Int>.create { (observer) -> Disposable in
    let error = MyError(message: "Test Error")
    observer.onError(error)
    return Disposables.create()
}
subscribe

只定義一個回調架構

observable.subscribe({ it in
    print("onNext \(it.element)")
})

定義onNext和onError框架

observable.subscribe(onNext: { it in
    print("onNext \(it)")
},onError: { error in
    print((error as! MyError).message)
})

定義onNext、onError和onCompleted異步

observable.subscribe(onNext: { it in
    print("onNext \(it)")
},onError: { error in
    print((error as! MyError).message)
},onCompleted: {

})

RxBlocking

RxBlocking是RxSwift中另一個單獨的框架。跟RxTest同樣,也須要進行pod引入框架,須要單獨添加依賴。RxBlocking能夠把RxSwift從異步響應變成同步,因此RxBlocking也多用來作單元測試。單元測試

pod 'RxBlocking'
import RxSwift
import RxBlocking
...

do{
    let result = try observable.toBlocking().first()
    print("結果:\(result)")
}catch{
    print((error as! MyError).message)
}
應用場景

好比咱們使用RxSwift實現圖片上傳,在發佈動態的時候須要先上傳圖片而後調用基於RxSwift實現的網絡請求。加上咱們不想嵌套調用,就能夠經過toBlocking同步調用。測試

RxTest

RxTest 是能夠用來構建RxSwift自動化測試的包,須要單獨須要進行pod引入框架。架構設計

相關文章
相關標籤/搜索