RxSwift

作者: 只为此心无垠 | 来源:发表于2018-05-30 10:24 被阅读12次

RxSwift

1、回忆

  • 前期准备:开店 就是block的保存,如约定仓库规则,交易规则,物流规则

  • 下单 = 订阅,对于触发block。商家给衣服加一层袋子包装,就是创建信号的过程。等于值加上一层上下文。

  • 物流 = map,等于各类操作。

      比如快递员来取件,又给包裹加一层包裹,就是快递盒子,此时衣服有两层上下文,而flatMap的操作可以降维。
    
  • 如果快递员打开你的包裹,里面是衣服,他偷偷拿了一件出来,然后纸箱原样封好,发往下一个目的,这样就是map。

  • 这是快递经过各个物流点,如果你很不幸运的话,又被map了;也可以是流水线分拨,这就可能涉及和其他信号的各种操作

  • 最后到派发快递员手上了,收到这个快递后,他知道马上又会收到你的另外一个快递,他选择等到另外一个快递一起送给你,这个就是zip;如果是按照收到顺序分开送,那就是merge

  • 总结:信号的上下文包装如图快递纸箱一样,我不必关心内部是什么,能按统一流程送到你手上

2、概念

参考文章:

1、RxSwift中文文档

2、Swift - RxSwift的使用详解3(Observable介绍、创建可观察序列)

3、RxSwift的使用详解5

  • 4.1 Observable - 可被监听的序列
  • 4.2 Observer - 观察者

  • 4.3 Observable & Observer 既是可被监听的序列也是观察者

  • 4.4 Operator - 操作符

  • 4.5 Disposable - 可被清除的资源

  • 4.6 Schedulers - 调度器

    四大核心组件VS

ReactiveCocoa RxSwift
1、信号源:RACStream 1、可被监听的序列 - Observable
2、订阅者:RACSubscriber 2、观察者 - Observer
3、调度者:RACScheduler 3、调度器 - Schedulers
4、清洁者:RACDisposable 4、可被清除的资源 - Disposable -

subject参考文章

1、RxSwift的学习之路(二)——Subjects

2、RxSwift 系列(二) -- Subject

3、设计规则:

参考文章:

【漫谈】从项目实践走向RxSwift响应式函数编程

4、如何选择操作符?

大部分和RAC的操作符一致

操作符文章:RxSwift学习之旅 - 序列的基本操作

可视化链接:http://rxmarbles.com/#combineLatest

map flatMap区别

参考文章:RxSwift 系列(九) -- 那些难以理解的概念

let disposeBag1 = DisposeBag()
let test = Observable.of("1", "2", "3", "4", "5")
      .map { Observable.just($0) }

test.subscribe(onNext: {
      print($0)
}).addDisposableTo(disposeBag1) 
------------------------------------------------------------------
输出
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
RxSwift.(Just in _BD9B9D4356C4038796FB16D0D54A9F8E)<Swift.String>
let disposeBag = DisposeBag()
let test1 = Observable.of("1", "2", "3", "4", "5")
    .flatMap { Observable.just($0) }

test1.subscribe(onNext: {
      print($0)
}).addDisposableTo(disposeBag)
--------------------------------------------
输出

1
2
3
4
5
  • map函数只能返回原来的那一个序列,里面的参数的返回值被当做原来序列中所对应的元素。
  • flatMap函数返回的是一个新的序列,将原来元素进行了处理,返回这些处理后的元素组成的新序列
  • map函数 + 合并函数 = flatMap函数

5、源码

参考文章:

1、RxSwift Observable 源码分析

2、【领略RxSwift源码】- 变换操作(Operators)

3、RXSwift源码浅析(一)

Producer<Element> : Observable<Element>

1、create返回AnonymousObservable实例,create_block被保存在AnonymousObservable实例的属性中
AnonymousObservable实例.subscribe,调用Producer.subscribe(Producer 是AnonymousObservable的父类),将观察者和sink垃圾者传进去调用AnonymousObservable实例.run
2、AnonymousObservable.run方法:利用传进去的参数(观察者和垃圾者)创建AnonymousObservableSink,把自己传进去调用sink.run,AnonymousObservableSink.run 触发self.create_block,参数是将AnonymousObservableSink转换成AnyObserver观察者(AnonymousObservableSink的on → AnyObserver的on ),返回的是一个disposable

6、项目推荐

1、TSWeChat:https://github.com/hilen/TSWeChat

2、喜马拉雅:https://segmentfault.com/a/1190000012776455

相关文章

网友评论

    本文标题:RxSwift

    本文链接:https://www.haomeiwen.com/subject/dkltsftx.html