e盾网络验证源码_swift核心逻辑源码分析

666f864adad25210fdb67157306ddae5.png

RxSwift核心流程

RxSwift这个优秀的框架,设计的api也是非常精简,让陌生的用户也能非常快速上手

  • 1: 创建序列
  • 2: 订阅序列
  • 3:发送信号
1ef6e02826e17ca3c18497be0bf2b8a2.png

我刚开始在探索的时候,我是比较好奇的:为什么我们的Cooci - 框架班级这个字符串会在订阅序列的subscribe的闭包打印。下面是我的代码分析

分析代码:

  • 1:创建序列的代码 Create 后面的 闭包A 里面有 3:发送信号,如果要执行 发送信号 ,必然要来到这个闭包A
  • 2:我们执行 2: 订阅序列 创建了 闭包B
  • 3:通过结果我们显然知道,先执行 闭包A 把 Cooci - 框架班级 传给了 闭包B
  • 猜测:代码里面嵌套了闭包的执行调用!猜测的真实性,我们开始解读源码来验证

RxSwift核心逻辑

创建序列

f7bd6f4e096f6a9540c6fc63ed864b32.png

大家可以很清晰看到我们的 可观察序列 的创建是利用协议拓展功能的create方法实现的,里面创建了一个 AnonymousObservable(匿名可观察序列) 命名还是体现了作者的思维 :这个类就是一个内部类,具备一些通用特性(具有自己功能的类才会命名) 下面我贴出这个类的继承关系

aa3c0c42badfca0b83d2c3482511efeb.png

从上面的图,我们可以清晰的看到的继承关系。那么这么多的内容还有那么多层嵌套,这个地方我们需要掌握什么:

  • create 方法的时候创建了一个内部对象 AnonymousObservable
  • AnonymousObservable 保存了外界的闭包
  • AnonymousObservable继承了 Producer 具有非常重要的方法 subscribe

订阅序列

这里说明这个订阅方法 subscribe 和我们上面所说的 subscribe 不是同一个方法

来自于对 ObservableType 的拓展功能

e5d2f56066b42499b8aa5a60e547023f.png

代码说明:

  • E 这里的意思是 Swift 的关联类型,这个如果仔细看过可观察序列的继承链源码应该不难得出:这个E 就是我们的 序列类型,我们这里就是String
718cbedf1587c4d500ee3bf73d078577.png
  • 创建了一个 AnonymousObserver (匿名内部观察者) 手法和我们的 AnonymousObservable 差不多,它这里的初始化是闭包参数,保存了外界的 onNext, onError , onCompleted , onDisposed 的处理回调闭包的调用,下面我还是给大家贴出 观察者 的继承链关系,帮助大家理解
86378a5d88860133ae2a6ef482132f3f.png
  • self.asObservable() 这个是我们的 RxSwift 为了保持一致性的写法
  • self.asObservable().subscribe(observer)其实本质就是 self.subscribe(observer),通过可观察序列的继承关系,我们可以非常快速的定位 Producer 订阅代码
0fd8435ef248d8b1d0a00ad132925c11.png
  • 关于销毁代码和调度者代码这里不分析
  • self.run 这个代码最终由我们生产者 Producer 延伸到我们具体的事务代码 AnonymousObservable.run
b9be9295098e02a8a293a11742ef4e68.png
  • sink.run的写法也是比较好的,业务处理的还是下沉了,让分工更加明确
b36a41180beb91b8186614173685b798.png
  • parent 就是上面传过来的AnonymousObservable对象
  • 我们非常兴奋的看到 AnonymousObservable._subscribeHandler,从这句代码我们解惑了为什么我们的序列订阅的时候流程会执行我们 序列闭包,然后去执行 发送响应
  • 发送响应的代码等会分析,这里还有一个比较重要的家伙 AnyObserver(self)
12afc26e2fd7aecb5c3cd7a9f00e9e7d.png
  • 在这个构造方法里面,我们创建了一个结构体 AnyObserver 保存了一个信息 AnonymousObservableSink .on 函数,不是 AnonymousObservableSink,这个地方一般初次来到这里的人都会犯错误。不知道你是否意识到了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值