RXSwift笔记

2021-07-20  本文已影响0人  咚咚嗒大人

RXSwift:把程序中每一个操作看成一个事件。例如:点击事件,filed文本改变、请求完成等,每一个事件源可以看成一个管道,也就是sequence(序列)。
例如:testFiled文本改变时,就会不断的发出事件,就会从他的这个sequence管道中不断流出,只需监听这个sequence(可监听序列),每流出一个事件就做相应的处理。
总结:将事件包装在一个序列里面,我们只需要监听从序列里面不断流出的事件即可。

序列:

Observable:对观察者发送全部的元素,无论观察者是何时进行订阅的。ReplaySubject会受bufferSize影响。

创建一个序列的一般方法伪代码:
 let json: Observable<泛型约束,事件类型:如JSON、[String:AnyHasble]、Data、Int> = Observable.create { observer -> Disposable in
    if (a) {
        observer.onNext(0)
    }else if (b) {
        observer.onNext(1)
        observer.onCompleted()
    }else {
        observer.onError(error!)
    }
    return Disposables.create()
 }

特征序列:

特征序列一:

不会共享附加作用:
主要用于数据请求、业务逻辑上:

特征序列二:

共享附加作用
不会产生 error 事件
一定在MainScheduler监听(主线程监听)
主要用于UI事件的生成序列上:

Observer 观察者/订阅者:用来监听事件,然后对这个事件做出响应。

 subscribe(onNext: { [weak self] in
     self?.showAlert()
 }, onError: { error in
     print("发生错误: \(error.localizedDescription)")
 }, onCompleted: {
     print("任务完成")
 })

特征观察者:

let observer: Binder<Bool> = Binder(usernameValidOutlet) { (view, isHidden) in
    view.isHidden = isHidden
}
 .bind(to: observer) <==等价于==> .bind(to: usernameValidOutlet.rx.isHidden)

既是可监听序列Observable也是观察者Observer, 既可发出事件也可监听事件。

例如:textField的当前文本。
// 作为可监听序列 ----它可以看成是由用户输入,而产生的一个文本序列

 let observable = textField.rx.text
 observable.subscribe(onNext: { text in show(text: text) })

// 作为观察者 ----由外部文本序列,来控制当前textField显示内容的观察者

 let observer = textField.rx.text
 text.bind(to: observer)

辅助类型:它们既是可监听序列也是观察者。可以帮组更准确的描述事物的特征:

操作符:

对序列中的事件做相应的操作(如:遍历、filter过滤、map转换、zip配对),生成新的序列。

Disposable - 可被清除的资源

一个序列如果发出了 error 或者 completed 事件,那么所有内部资源都会被释放。

self.disposable = textField.rx.text.orEmpty.subscribe(onNext: { text in print(text) })
self.disposable?.dispose()

调用 dispose 方法后,订阅将被取消,并且内部资源都会被释放。

_ = usernameValid.takeUntil(self.rx.deallocated).bind(to: passwordOutlet.rx.isEnabled)//订阅一直持续到控制器的dealloc事件产生为止。
使用takeUntil操作符:实现自动取消订阅的方法

Schedulers - 调度器

  1. MainScheduler 代表主线程。
  2. SerialDispatchQueueScheduler 抽象了串行 DispatchQueue。
  3. ConcurrentDispatchQueueScheduler 抽象了并行 DispatchQueue。
  4. OperationQueueScheduler 抽象了 NSOperationQueue。
上一篇 下一篇

猜你喜欢

热点阅读