在Android开发上,RxJava已是很是重要的组成之一。最近在用Swift开发iOS应用,考虑在架构设计上使用RxSwift。bash
# 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引入框架。测试