RxSwift极简入门

    关于RxSwift网上有多资料介绍,但部分来说很多都是关注于具体细节,以至于有一种看完有种似懂非懂的感觉。最近学习和使用了一段时间,这里写一下自己学习和使用的一些感受,不讨论具体的细节从整体上理解这个框架。

是什么

    RxSwift根据中文文档介绍是一个用swift编写的函数式响应框架,这里有三个关键的点。

  • swift编写的,这意味着学习这个框架是需要一点swift语言基础的,它主要服务于swift编写的项目环境。
  • 函数式,是一个比较抽象的概念这里简单的可以理解为可以使用函数作为参数使用和传递。
  • 响应式,同样可以简单的理解为一个事件发生就可以有对应的响应事件来接收和处理。

能做什么

    知道了它是一个框架,那它具体能做些什么呢?主要用于解决什么问题呢?我们都知道框架是一般来说是为了提升开发效率而被创造出来的,RxSwift同样可以提升我们开发效率。

    对于客户端程序我们主要解决的问题有两个处理用户交互和展示界面,其他的所有事情都是围绕这两个核心功能展开的。用户的交互也就是一系列的用户事件以及响应事件,通过RxSwift的基本介绍我们知道它的一个核心就是响应式的。页面展示主要体现为将一些数据可视化,以一种人性化的方式给用户使用。这涉及两个问题一数据加工处理,二页面元素于数据绑定。数据的加工处理也可以看作是一个事件,数据与页面元素的绑定可以看作是响应事件。数据加工处理的过程一般是不确定的,但是事件的传递和响应一般来说是个稳定的过程,通过函数式的思想将不确定的过程封装为函数传递到稳定的事件反馈中,就是一个不错的设计,这也是RxSwift的另一个核心。

    一个简单的例子,我们想要设置一个文本的文字如text=“xxxxx”,一般来说当文本内容发生改变的时候我们需要再次设置如text=“yyyyyy”。这个过程实际上有些重复而繁琐,那是否可以优化一下提升效率呢?试想一下如果text与文字是绑定关系就好了,只要文字发生改变text上的文字也自动跟着改变,那我们将从页面元素和数据同步的逻辑中解放出来。RxSwift就是可以解决这种问题,以上问题我们可以把数据改变看作是一个事件,而页面元素和数据同步可以看作是一个响应。

    RxSwift可以为我们创建一个类似于流水线的东西,我们可以通过函数作为参数传递进行数据处理、事件反馈。由于是流水线意味着我们只需定义一次即可重复使用,大大提升了开发效率以及将本来分散的逻辑集中到一条流水线上这样提升了易维护性。

什么结构和规格

    知道了RxSwift是什么和能解决什么问题,我们一起来看看它是怎么解决这些问题的吧。先来看看它的整体架构,架构图如下

    从图中可以看到它设计了这个几个规格的子模块生产事件、响应事件、生命周期、事件组合操作。还有一个核心图中没有体现那就是线程队列管理。

  • Observable - 产生事件,为了接收事件RxSwift设计了一个叫可监听序列的概念,理解起来有些抽象。举个例子一个按钮的点击、一个文本的改变,我们需要可以知道它的状态发生改变了,这就需要它是可以监听的,Observable将抽象的这些可以发生变化的事件具体化为了一个对象,并且类似将它们存放在一个数组中,而每次事件发生变化时都可以触发回调。
  • Observer - 响应事件,响应事件是为了处理产生事件而设计的,当触发生产事件回调时,可以对应的响应事件进行事件处理。
  • Operator - 创建变化组合事件,有些复杂场景需要将多个事件共同作用的结果看作为一个新的事件,这时候就可以通过丰富的事件组合操作,将事件组合起来以满足千变万化的需求。
  • Disposable - 管理绑定(订阅)的生命周期,RxSwif还提供了使用的生命周期管理,提升了使用的灵活性,让整个流程的得到有始有终的管理,不至于混乱。
  • Schedulers - 线程队列调配,一些事件可能需要在主线程上处理,通过使用线程队列的使用调配也就能满足多线程的使用场景。

    RxSwif通过设计了5个规格不同的子模块,实现了以事件监听及响应为核心的函数式响应框架,通过Observable将事件具体化、可监听化,通过Observer绑定或者订阅Observable的变化进行响应,使用Operator可以让各种事件完成组合。

    每一个子模块又有各种对应特定场景的实现,具体使用的场景的可以参考开发手册进行学习使用,理解的框架的架构设计,使用上就是经验和熟练度的问题了,这需要时间和项目的积累了。

简单使用

     使用上我觉主要牢记和理解两个概念产生事件、响应事件。这个两个概念的理解上我觉得主要在于如下几点。

  • 生产事件,是怎么触发回调的。对于触发如何触发回调,不要执着于概念本身,只需要知道无论怎么样,要触发回调肯定是调用了回调函数,至于什么情况下触发那需要具体情况具体分析。那我们只需要知道调用回调函数的函数是什么就可以了,触发回调就是调用了回调函数。
  • 响应事件,是怎样绑定的。对于绑定因为是使用的函数式的编程范式,可以理解为绑定就是回调函数的一个参数。

举个例子:

let disposeBag = DisposeBag()
let subject = ReplaySubject<String>.create(bufferSize: 0)
subject.subscribe { print("Subscription: 1 Event:", $0) }.disposed(by: disposeBag)subject.onNext("												

RxSwift极简入门相关推荐

  1. Docker极简入门

    原 Docker极简入门 2018年05月22日 20:25:12 阅读数:44 一.Docker概述 Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码.运行时.库 ...

  2. .Net Core in Docker极简入门(下篇)

    点击上方蓝字"小黑在哪里"关注我吧 Docker-Compose 代码修改 yml file up & down 镜像仓库 前言 上一篇[.Net Core in Dock ...

  3. Nginx 极简入门教程

    Nginx 极简入门教程 基本介绍 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP服务. Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第 ...

  4. Python极简入门教程

    前言 为了方便各位小白能轻松入门Python,同时加深自己对Python的理解,所以创造了"Python极简入门教程",希望能帮到大家,若有错误请多指正,谢谢.极简入门教程代表着不 ...

  5. SkyWalking 极简入门

    1. 概述 1.1 概念 SkyWalking 是什么? FROM http://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务.云原生架构和基于容器(Do ...

  6. Seata 极简入门

    1. 概述 Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务. 1.1 四种事务模式 Seata 目标打造一站式的分布事务的解决方案,最终会提供四种事务 ...

  7. RL极简入门:从MDP、DP MC TC到Q函数、策略学习、PPO

    前言 22年底/23年初ChatGPT大火,在写ChatGPT通俗笔记的过程中,发现ChatGPT背后技术涉及到了RL/RLHF,于是又深入研究RL,研究RL的过程中又发现里面的数学公式相比ML/DL ...

  8. APISIX 极简入门(国产微服务网关)

    1. 概述 APISIX 是基于 OpenResty + etcd 实现的云原生.高性能.可扩展的微服务 API 网关.它是国人开源,目前已经进入 Apache 进行孵化,牛逼!!! OpenRest ...

  9. 机器学习极简入门课程

    开篇词 | 入门机器学习,已迫在眉睫 大家好,我是李烨.现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师.先后参与过聊天机器人.大数 ...

  10. [转载]芋道 Soul 极简入门(国产微服务网关)

    摘要: 原创出处 http://www.iocoder.cn/Soul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 由于原著写作时间时间有点久了:有部分类容需要更新,后去个人会再发布文章 ...

最新文章

  1. note-在VisualStudio中使用正则表达式
  2. CentOS 7 源码编译安装 Redis
  3. 【BZOJ3518】点组计数 [欧拉函数]
  4. 为什么java中floatda正确_为什么cast to float在java中产生正确的结果?
  5. 逍遥自动秒收录导航网源码绿色版+全站SEO优化
  6. Linux高频命令汇总,高频Linux命令
  7. 《极客与团队》一说到底真正重要的还是代码本身
  8. c语言程序设计一至六章测验,c语言程序设计1-6章.ppt
  9. USB协议学习笔记 - 引言
  10. 高考2021加3科目成绩查询,官方解读:2021新高考实施方案正式公布,首选科目按原始分计入总成绩!...
  11. rockchip eDP 配置
  12. python selenium某里国际站网站注册登录验证问题
  13. 50欧姆线设计 高频pcb_50欧阻抗天线设计
  14. SrpingCloud微服务 服务调用逻辑图
  15. 2021最新版成语接龙小程序源码
  16. 工业以太网交换机和普通交换机的区别 热设计为例
  17. Android系统中的输入输出设备
  18. PRA2020.4 平台 API 接口调用
  19. J2EE疑难解决实例--转自JSP中文网
  20. springboot的parent标签

热门文章

  1. 从session里面取得值为null
  2. MATLAB电话拨号音仿真,MATLAB电话拨号音的合成与识别
  3. AWB(Auto White Banlance)——自动白平衡
  4. 没有鸿蒙HarmonyOS,用这个软件也可以实现华为的多屏协助互动!
  5. 【东南大学主办: IEEE ICSIP 2022】信号与图像处理热门主题,7月邀您相约苏州
  6. session fixation漏洞简述
  7. Modelsim搭建具有各组件的UVM验证平台
  8. 计算机控制实验总结电机调速,控制步进电机调速系统实验报告
  9. java基础知识选择题及答案,java面试题库及答案
  10. vue怎么制作甘特图——dhtmlx-gantt