RAC(ReactiveCocoa)使用方法(一)
RAC(ReactiveCocoa)使用方法(一)
RAC(ReactiveCocoa)使用方法(二)
什么是RAC?
最近回顾了一下ReactiveCocoa 的方法,也看了一些人的文章,现写篇文章总结一下。
现在这个库最新支持Swift,如果你要是用Cocoapods 的话不指定版本它默认是下载Swift版本,如果依旧想用OC版本就指定一个版本,最好是V2.5版本及以下,否则可能会出现错误。最近我试的是V2.5,可以正常使用。
项目中用Cocoapods 使用:pod "ReactiveCocoa", '~> 2.5'
那什么是RAC勒?想必大家随便谷歌一下就一大片这个概念和文章。
RAC具有函数响应式编程特性,由Matt Diephouse开源的一个应用于iOS和OS X的新框架。
部分参考来源
为什么要使用RAC?
因为RAC具有高聚合低耦合的思想,使用RAC会让代码更简洁,逻辑更清晰。再结合MVVM架构,让你瞬间爽爆了!
RAC有很多的类,为很多的UI控件都拓展了方法,使得开发大大的简便化,这里就简单的介绍开发过程中用到的方法。
打开应用的初始ViewController,引入ReactiveCocoa的头文件。
#import <ReactiveCocoa/ReactiveCocoa.h>
在控制器中创建一个TextField,SB拖入更方便,然后如下
[self.TextField.rac_textSignal subscribeNext:^(id x){
NSLog(@"x:%@", x);
}];
编译运行,在输入框中输入文字。注意打印信息的输出应该和下面的类似。
2017-11-29 10:26:25.152197+0800 MVVM-Demo[1089:230607] x:a
2017-11-29 10:26:25.159596+0800 MVVM-Demo[1089:230607] x:ah
2017-11-29 10:26:25.385413+0800 MVVM-Demo[1089:230607] x:ahv
2017-11-29 10:26:25.576558+0800 MVVM-Demo[1089:230607] x:ahva
2017-11-29 10:26:25.764013+0800 MVVM-Demo[1089:230607] x:ahvah
2017-11-29 10:26:25.784379+0800 MVVM-Demo[1089:230607] x:ahvahv
2017-11-29 10:26:25.853596+0800 MVVM-Demo[1089:230607] x:ahvahvj
2017-11-29 10:26:25.868552+0800 MVVM-Demo[1089:230607] x:ahvahvja
2017-11-29 10:26:26.002545+0800 MVVM-Demo[1089:230607] x:ahvahvjav
2017-11-29 10:26:26.062553+0800 MVVM-Demo[1089:230607] x:ahvahvjavj
当你看到这些打印信息,你是不是觉得很神奇,都没有监听TextField的方法,它咋就那么牛逼勒。其实RAC内部就帮你做了许多事情。你只要调用相应控件的RAC方法就可以监听到它们的状态了。
那么它是怎么监听怎么做到的勒?
这里要讲几个很重要的RAC类,不涉及RAC原理,内部怎么实现还要大家去阅读源码了。
RACSiganl
1、RACSiganl 信号类,表示将来有数据传递,有数据改变,信号内部接收到数据,就会马上发出数据,外部就可以接收到数据了。就像刚刚上面的例子一样。
2、默认信号都是冷信号,就是这个值改变了它不会触发,只有订阅(调用信号RACSignal的subscribeNext订阅)了这个信号,这个信号才会变为热信号(值一改变就触发),才会触发。
RACSiganl简单使用:
// 1.创建信号
RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
// 每当有订阅者订阅信号,就会调用block。
// 2.发送信号
[subscriber sendNext:@"我是一个信号
RAC(ReactiveCocoa)使用方法(一)的更多相关文章
- RAC(ReactiveCocoa)使用方法(二)
RAC(ReactiveCocoa)使用方法(一) RAC(ReactiveCocoa)使用方法(二) 上篇文章:RAC(ReactiveCocoa)使用方法(一) 中主要介绍了一些RAC中常见类的用 ...
- RAC(ReactiveCocoa)介绍(一)
最近在学习RAC,之前在iOS工作中,类之间的传值,无非是block.delegate代理.KVO和Notification等这几种方法.在RAC中,同样具备替代block.delegate代理.KV ...
- RAC(ReactiveCocoa)概括
ReactiveCocoa(简称RAC,以下都用RAC)是github团队开源的一套基于Cocoa并且具有FRP(Functional Reactive Programming-响应式编程)特性的框架 ...
- [iOS]ReactiveCocoa安装方法
1. 替换Ruby镜像 我们想要使用CocoaPods来安装ReactiveCocoa.由于OS X上的Ruby镜像被墙了,感谢淘宝为我们提供了国内访问镜像. $ gem sources --remo ...
- oracle 11g RAC 补丁升级方法
一.自动升级方法 使用auto方式在两节点分别进行PSU的安装,安装PSU前注意更新opatch工具至PSU所要求版本,p22191577补丁包括GI和DB,分别执行即可. 两节点分别grid用户执行 ...
- Oracle卸载之正确卸载rac数据库的方法(MOS卸载方法)
一.关闭数据库和资源 1.节点1 [root@node1 bin]# pwd /u01/app/11.2.0/grid/bin [root@node1 bin]# ./crsctl stop crs ...
- OC+RAC(六) 核心方法bind
-(void)_test6{ RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> ...
- RAC中常见的高级用法-bind方法
RAC操作思想: Hook(钩子)思想 RAC核心方法:bind bind方法 假设想监听文本框的内容,并且在每次输出结果的时候,都在文本框的内容拼接一段文字" ...
- Linux下手工卸载11.2 RAC(非MOS的deinstall方法)
思路来自于经典的<How to Proceed From a Failed 10g or 11.1 Oracle Clusterware (CRS) Installation (Doc ID 2 ...
随机推荐
- win10 UWP Controls by function
Windows的XAML UI框架提供了很多控件,支持用户界面开发库.其中一些有可视化,一些布局. 一些控件例子:https://github.com/Microsoft/Windows-univer ...
- 我的第一个python web开发框架(11)——工具函数包说明(二)
db_helper.py是数据库操作包,主要有两个函数,分别是read()数据库读操作函数和write()数据库写操作函数.这个包的代码是从小戴同学分享的博文改造过来的. #!/usr/bin/env ...
- 【NOIP2015提高组】 Day2 T3 运输计划
题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如: ...
- LeetCode 268. Missing Number (缺失的数字)
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- 我搞zabbix的那两天
摘要:在生产环境上对服务器进行网络参数(比如CPU.内存等)的监控是很必要的,比如当服务器网络参数如内存不够用.磁盘空间快要占满时及时通知运维人员进行处理,保证服务器系统的安全.而zabbix就是这么 ...
- git常用命令集合
git命令 git init:创建一个仓库并在目录下新建一个.git的文件(初始化一个git仓库) 注:.git文件在工作区,是一个隐藏文件(用ls -ah命令查看),但是它不算工作区,而是git 的 ...
- input file选择图片后 预览
很多前端都选择用插件来实现图片预览,这个小功能也可以很简单的用jQuery来实现 简单的jQuery实现input file选择图片后,可以预览图片的效果 简单的HTML代码: <div> ...
- A计划(双层bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- mysql别名的使用
在项目中遇到别名的问题,抽时间整理了一下 在sql中,合理的使用别名可以让sql更容易写并且提高可读性.别名使用 as 来表示,可以分为表别名和列别名. 别名应该是先定义后使用才对,所以首先要了解sq ...
- 蓝桥杯-算法训练--ALGO-4 结点选择
本人是一个刚刚接触C++不久的傻学生~记录一些自己的学习过程.大神路过可以批评指正~ 刚学动态规划,水平还很渣,一下子不知道从何下手,借鉴了一下这位大哥的文章 http://www.cnblogs.c ...