RxSwift、RxBlocking、RxTest初尝试

简介: 在Android开发上,RxJava已经是非常重要的组成之一。最近在用Swift开发iOS应用,考虑在架构设计上使用RxSwift。添加依赖# Podfileuse_frameworks!target 'YOUR_TARGET_NAME' do pod 'RxSwift', '~...

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

相关文章
|
5月前
|
安全 Swift iOS开发
【Swift开发专栏】Swift中的属性观察者与KVO
【4月更文挑战第30天】Swift编程语言支持属性观察者(`willSet`和`didSet`)和键值观察(KVO)来响应属性变化。属性观察者在设置前(`willSet`)和设置后(`didSet`)执行代码,可用于数据绑定。KVO是Cocoa/Cocoa Touch中的机制,需`NSObject`子类和`@objc dynamic`属性配合使用。注意在观察者销毁前移除观察,以避免内存问题。示例展示了属性观察者实现简单数据绑定。
71 1
|
API Swift iOS开发
|
前端开发
RxSwift-双向绑定
RxSwift-双向绑定
282 0
|
存储 设计模式 前端开发
|
JavaScript
手写代码:实现一个EventBus
EventBus,事件总线。总线一词来自于《计算机组成原理》中的”系统总线“,是指用于连接多个部件的信息传输线,各部件共享的传输介质。我们通常把事件总线也成为自定义事件,一般包含`on`、`once`、`emit`、`off`等方法。在Vue2中想要实现EventBus比较简单,直接暴露出一个`new Vue()`实例即可,以此为思路,我们应该如何自定义实现EventBus呢?
504 0
手写代码:实现一个EventBus
|
Android开发
Livedata用的爽吗,StateFlow你也应该了解一下
Livedata用的爽吗,StateFlow你也应该了解一下
751 0
Livedata用的爽吗,StateFlow你也应该了解一下
|
传感器 设计模式 缓存
【Medium 万赞好文】ViewModel 和 LiveData:模式 + 反模式
【Medium 万赞好文】ViewModel 和 LiveData:模式 + 反模式
【Medium 万赞好文】ViewModel 和 LiveData:模式 + 反模式
|
iOS开发
iOS动画开发之四——核心动画编程(CoreAnimation)
iOS动画开发之四——核心动画编程(CoreAnimation)
179 0
iOS动画开发之四——核心动画编程(CoreAnimation)
|
架构师 开发者 iOS开发
探究ReactiveCocoa 底层KVO封装流程
一、对比原生KVO,初识ReactiveCocoa的KVO * 我们先来看一段代码,通过触屏来动态修改视图背景色 @interface ViewController () @property (nonatomic, strong)UIColor * bgColor; @end @implemen...
3117 0
|
前端开发
[译] 实用的 MVVM 和 RxSwift
今天我们将使用 RxSwift 实现 MVVM 设计模式。对于那些刚接触 RxSwift 的人,我 在这里 专门做了一个部分来介绍。
1361 0