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+。
导入头文件
三、信号(RACSignal)
Signal有很多方法可以来订阅不同的事件类型。每个方法都需要至少一个block,当事件发生时就会执行block中的逻辑,RAC框架使用category来为很多基本UIKit控件添加signal。这样你就能给控件添加订阅了。
1、UITextField
1.1 、Next事件 : 看到每次改变文本框中的文字,执行对应的代理方法,在没使用RAC之前,我们是通过设置代理,通过实现代理方法
但是,当我们使用ReactiveCocoa后,一行代码解决
控制台打印
分析: ReactiveCoco通过category给UITextField添加文本信号源(signal),然后信号源将事件流给subscriber。目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。
之前有谈过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事件。
相关文章推荐
- React-Native系列Android——Touch事件原理及状态效果
- 一看就懂的ReactJs入门教程(精华版)
- react-native--Navigator
- ReactNative学习十六-View属性及Style
- 【React Native开发】React Native移植原生Android项目(Mac用)
- ReactNative学习十五-横竖布局及右上角圆点
- MVVM With ReactiveCocoa
- Windows下react-native安装步骤以及安装时候遇到各类已填平的坑
- ReactNative学习十四-再次弹性盒(Flexbox)
- react-native-闪屏页
- ReactNative学习十三-Props和State
- React Native 安卓真机测试报错 java.util.concurrent.ExecutionException:java.lang.RuntimeException:referenceError: can't find variable:_fbBatchedBridge(<unknown file>:1)
- React Native 组件的生命周期
- React Native环境搭建
- React Native配置和使用
- react native android使用react-native-tab-navigator来做底部导航tabbar(2)一个坑:navigator
- react native android使用react-native-tab-navigator来做底部导航tabbar(1)
- ReactJS学习笔记(四)-条件判断的几种形式
- react native中使用react-native-viewpager实现的商品展示添加点击事件
- React Native 开源组件