RxSwift极简入门

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("🐶")
subject.onNext("🐱")

subject
  .subscribe { print("Subscription: 2 Event:", $0) }
  .disposed(by: disposeBag)

subject.onNext("🅰️")
subject.onNext("🅱️")


输出结果:
Subscription: 1 Event: next(🐶)
Subscription: 1 Event: next(🐱)
Subscription: 1 Event: next(🅰️)
Subscription: 2 Event: next(🅰️)
Subscription: 1 Event: next(🅱️)
Subscription: 2 Event: next(🅱️)

    我们来看这段代码有些东西看不懂没关系,关键是找我们说的两个核心产生事件、绑定事件。在这个例子中我们实现的事情比较简单就是打印生产事件变化的字符。

   产生事件的对象这个例子中名为 subject ,绑定事件呢?就是上面的两个打印函数,print(“Subscription: 1 Event:”, $0)、print(“Subscription: 2 Event:”, $0),其他除了subject.onNext()这个函数以外都是骨架代码,就如上文介绍的类似一个流水线。而subject.onNext()这个函数就是调用回调函数的函数,在这个例子中可以传递一个字符串给响应事件。这个例子中各个部件如下:

  • 产生事件 subject,变化量是字符串
  • 响应事件 print(“Subscription: 1 Event:”, $0)、print(“Subscription: 2 Event:”, $0),用于打印subject变化时的字符串
  • 调用回调函数的函数,subject.onNext(),用于触发响应事件的调用和数据传递。
总结

      RxSwift是一个函数式响应框架,可以将事件反馈具体化为流水管道,一次定义可以重复使用,大大提升了开发效率,让我们可以从重复繁杂的UI元素与数据同步操作中解脱出来。它针对特定的场景都有更为细致的处理,并提供了相应的解决方案,对于框架的使用熟练度需要项目和时间的积累。

参考文献

《RxSwift中文文档》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值