加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

小学生笔记之ReactiveCocoa入门

发布时间:2020-12-15 03:34:22 所属栏目:百科 来源:网络整理
导读:一、响应式编程范式FRP FRP,全称为Functional Reactive Programming,是一种响应变化的编程范式,最近几年比较火,大概的理解就像这样: 当a的值或者b的值发生变化时,c的值会自动响应a的值或b的值变化的信号,自动更正自己的值,类似这种编程思想就称为FRP

一、响应式编程范式FRP

FRP,全称为Functional Reactive Programming,是一种响应变化的编程范式,最近几年比较火,大概的理解就像这样:

当a的值或者b的值发生变化时,c的值会自动响应a的值或b的值变化的信号,自动更正自己的值,类似这种编程思想就称为FRP。

FRP提供了一种信号机制来实现这样的效果,通过信号来记录值的变化。信号可以被叠加、分割或合并。通过对信号的组合,就不需要去监听某个值或事件。

二、ReactiveCocoa介绍

ReactiveCocoa是github开源的一个第三方框架,是在iOS平台上对FRP的实现。
FRP的核心是信号,信号在ReactiveCocoa(以下简称RAC)中是通过RACSignal来表示的,信号是数据流,可以被绑定和传递。

下面简单介绍下RAC的几个概念:
  1. Signal:信号管,可以想象成水龙头
  2. Value:信号值,可以想象成玻璃球
    可以把信号管(Signal)想象成水龙头,只不过里面不是水,而是玻璃球(Value),直径跟水管的内径一样,这样就能保证玻璃球是依次排列,不会出现并排的情况(数据都是线性处理的,不会出现并发情况)
  3. Subscriber:接受方,可以想象成水龙头出水口
    水龙头的开关默认是关的,除非有了接收方(Subscriber),才会打开。这样只要有新的玻璃球进来,就会自动传送给接收方。
  4. Filter:过滤器
    可以在水龙头上加一个过滤嘴(Filter),不符合的不让通过
  5. Map:改动器
    可以在水龙头上加一个改动装置(Map),把球改变成符合自己的需求

三、ReactiveCocoa框架各组件

1. RACStream类

水管里面流动的一系列玻璃球,它们有顺序的依次通过,在第一个玻璃球没有到达之前,你没法获得第二个玻璃球,RACStream描述的就是这种线性流动玻璃球的形态,比较抽象,是作为描述抽象的父类,它本身的使用意义并不很大,一般会以RACSignal或者RACSequence等这些更高层次的表现形态代替。

RACStream的功能总结看下图:

2. RACSignal类

RAC的核心概念就是Signal,它一般表示未来要到达的值,想象玻璃球一个个从水龙头里出来,只有了接收方才能获取到这些玻璃球。
RACSignal会发送下面三种事件给它的接受方,想象成水龙头有个指示灯来汇报它的工作状态,接受方通过-subscribeNext:error:completed:对不同事件作出相应反应:

    Next:从水龙头里流出的新玻璃球
  1. Error:获取新的玻璃球发生了错误,一般要发送一个NSError对象,表明哪里错了
  2. Completed:全部玻璃球已经顺利抵达,没有更多的玻璃球加入了

RACSignal可以发送任意多个Next事件,和一个Error或者Completed事件

3. RACSubject类

RACSubject类,可以认为是“可变的(Mutable)”信号/自定义信号,它是嫁接非RAC代码到Signal世界的桥梁

4. RACCommand类

RACCommand类,可以认为是回应某些动作的信号,通常触发该信号的动作都是UI控件

5. RACSequence类

RACSequence类,可以简单看做是RAC世界的NSArray,RAC增加了-rac_sequence方法,可以使诸如NSArray这些集合类直接转换为RACSequence来使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读