在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
import RxSwift ... let observable = Observable<Int>.create { (observer) -> Disposable in observer.onNext(1) observer.onCompleted() return Disposables.create() }
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() }
只定義一個回調架構
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是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 是能夠用來構建RxSwift自動化測試的包,須要單獨須要進行pod引入框架。架構設計