今天看啥  ›  专栏  ›  伤心的Easyman

RXSwift(五)探索RXSwift核心逻辑之发送信号及总结

伤心的Easyman  · 掘金  ·  · 2019-09-01 14:31
阅读 4

RXSwift(五)探索RXSwift核心逻辑之发送信号及总结

RXSwift(三)探索RXSwift核心逻辑之创建序列

RXSwift(四)探索RXSwift核心逻辑之订阅序列

RXSwift(五)探索RXSwift核心逻辑之发送信号及总结

前言

Talk is cheap, show me the code!

探索过程

  • 老规矩,还是点击进入源代码

    image

  • 来到了ObserverType里的onNext函数,当我再想进入里面的源码时,发现有很多个选择,一个个选当然不靠谱咯,很简单的事,加个断点,看看self的类型

    image

  • 断点看到了self的类型是 RxSwift.AnyObserver<String>,所以找AnyObserver的on方法进去看看

    image

  • 看到这里发现很熟悉,这不就是在上篇文章里探索到的吗?所以刚才的observer.on调用的就是 AnonymousObservableSink.on!!!

    image

  • 然后去找到AnonymousObservableSink.on,调用的是这里的self.forwardOn

    image

  • 然后找到是self._observer.on, 调用的是AnonymousObservableSink._observer.on

    image

  • 在上一篇文章探索订阅序列的时候,然后沿着这个路径往回找这个observer,然后发现在这个observer就是一开始就创建的AnonymousObserver

    image

  • 所以其实AnonymousObservableSink._observer.on调用的就是AnonymousObserver.on,然后这个on方法其实就是遵循的ObserverType协议里的on方法, 在ObserverBase里找到这个on方法,.next这些都是调用了onCore方法

    image

  • 然后这里保存了eventHandler的事件代码块, onCore是执行这个事件代码块

    image

  • 然后这个eventHandler是哪里调用的呢?不就是我们创建序列时传递进去的吗?正好回到了创建序列的起点,value = "这是新号"

    image

  • 这时回到外面,豁然开朗, 第三步发送信号后走到了 订阅序列的闭包里,所以能打印出 订阅到:这是信号, 源码解析到这里,就基本掌握了RXSwift的核心逻辑了。一路探索下来,真的很神奇!!希望看到这篇文章的人也能跟着探索一遍,探索完真的很爽!!!

    image

RXSwift核心逻辑图解

image

总结

  1. RXSwift很神奇,万物皆序列
  2. RXSwift的函数响应式编程思想令人惊叹,下沉式操作体现了函数式,用sink来封装一些开发者不关心的逻辑,便于使用
  3. 响应式的体现就是这个事件流了,订阅一次竟然能实现只要接收到响应就能源源不断的接收到信号,一直响应,从未停止



原文地址:访问原文地址
快照地址: 访问文章快照