您的位置:首页 > Web前端 > React

ios ReactiveCocoa之React Pargram

2016-04-08 10:03 387 查看
一、概述

之前有谈过MVVM架构的时候,稍微提及到ReactiveCocoa(简称RAC)。

首先,ReactiveCocoa也是个第三方框架,它主要包含

( 1 ) 响应式编程(React Pargram)

( 2 ) 函数式编程(Foundation Pargram)

( 3 ) 无状态

( 4 ) 不可修改

本文主要谈下响应式编程。在ios开发中,我们都习惯基于事件(EVent)去处理一个动作发生后的后续连贯动作。

例如 : 用支付宝支付一笔订单,输入支付密码,当输入密码到第六位的时候,主动发送网络请求支付订单。这时候,我们需要监听字符长度,当字符长度恒等于某个定值,就发送网络请求。通常监听长度我们都会去调用对应的代理方法。这种处理方式都是基于事件。表现形式大致有action、delegate、KVO、callback等。ReactiveCocoa为应用中发生的不同事件流提供了一个标准接口(信号 Signal ),从而可以使用一些基本工具来更容易的连接、过滤和组合。

二、如何导入ReactiveCocoa

ReactiveCocoa属于github上的开源库(https://github.com/ReactiveCocoa/ReactiveCocoa),

建议用cocoapods直接导入。如何用cocoapods详见这博文

/article/8449149.html

支持ios8.0+, os x10.9+。

导入头文件
#import <ReactiveCocoa.h>


三、信号(RACSignal)

Signal有很多方法可以来订阅不同的事件类型。每个方法都需要至少一个block,当事件发生时就会执行block中的逻辑,RAC框架使用category来为很多基本UIKit控件添加signal。这样你就能给控件添加订阅了。

1、UITextField

1.1 、Next事件 : 看到每次改变文本框中的文字,执行对应的代理方法,在没使用RAC之前,我们是通过设置代理,通过实现代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

NSLog(@"%@",textField.text);
return YES;
}


但是,当我们使用ReactiveCocoa后,一行代码解决

[field.rac_textSignal subscribeNext:^(id x) {
NSLog(@"%@",x);

} ];


控制台打印

2016-04-08 10:48:42.418 ReactiveCocoa[13833:515744] A
2016-04-08 10:48:43.434 ReactiveCocoa[13833:515744] As
2016-04-08 10:48:44.818 ReactiveCocoa[13833:515744] Asd
2016-04-08 10:48:45.461 ReactiveCocoa[13833:515744] Asdf
2016-04-08 10:48:47.580 ReactiveCocoa[13833:515744] Asdfg
2016-04-08 10:48:49.091 ReactiveCocoa[13833:515744] Asdfgh


分析: ReactiveCoco通过category给UITextField添加文本信号源(signal),然后信号源将事件流给subscriber。目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: