在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引入框架。架构设计