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)使用方法(一)的更多相关文章

  1. RAC(ReactiveCocoa)使用方法(二)

    RAC(ReactiveCocoa)使用方法(一) RAC(ReactiveCocoa)使用方法(二) 上篇文章:RAC(ReactiveCocoa)使用方法(一) 中主要介绍了一些RAC中常见类的用 ...

  2. RAC(ReactiveCocoa)介绍(一)

    最近在学习RAC,之前在iOS工作中,类之间的传值,无非是block.delegate代理.KVO和Notification等这几种方法.在RAC中,同样具备替代block.delegate代理.KV ...

  3. RAC(ReactiveCocoa)概括

    ReactiveCocoa(简称RAC,以下都用RAC)是github团队开源的一套基于Cocoa并且具有FRP(Functional Reactive Programming-响应式编程)特性的框架 ...

  4. [iOS]ReactiveCocoa安装方法

    1. 替换Ruby镜像 我们想要使用CocoaPods来安装ReactiveCocoa.由于OS X上的Ruby镜像被墙了,感谢淘宝为我们提供了国内访问镜像. $ gem sources --remo ...

  5. oracle 11g RAC 补丁升级方法

    一.自动升级方法 使用auto方式在两节点分别进行PSU的安装,安装PSU前注意更新opatch工具至PSU所要求版本,p22191577补丁包括GI和DB,分别执行即可. 两节点分别grid用户执行 ...

  6. Oracle卸载之正确卸载rac数据库的方法(MOS卸载方法)

    一.关闭数据库和资源 1.节点1 [root@node1 bin]# pwd /u01/app/11.2.0/grid/bin [root@node1 bin]# ./crsctl stop crs ...

  7. OC+RAC(六) 核心方法bind

    -(void)_test6{ RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> ...

  8. RAC中常见的高级用法-bind方法

    RAC操作思想:      Hook(钩子)思想 RAC核心方法:bind      bind方法      假设想监听文本框的内容,并且在每次输出结果的时候,都在文本框的内容拼接一段文字" ...

  9. Linux下手工卸载11.2 RAC(非MOS的deinstall方法)

    思路来自于经典的<How to Proceed From a Failed 10g or 11.1 Oracle Clusterware (CRS) Installation (Doc ID 2 ...

随机推荐

  1. (@WhiteTaken)设计模式学习——代理模式

    今天学习了一下代理模式,代理模式分为很多种.目前感觉有两种是需要学习一下的. 静态代理模式 动态代理模式 1. 静态代理模式 需要被代理的类,实现一个或者多个接口. 代理类需要实现被代理类的接口,在此 ...

  2. WPF popup置顶

    在程序写一个popup发现他会在置顶,在网上找了两大神代码http://www.cnblogs.com/Leaco/p/3164394.html http://blog.csdn.net/baijin ...

  3. UWP win10 app 新关键字x:Bing

    原本使用MVVM开发,我们使用数据绑定是x:Binging 新的关键字x:Bing使用和原来x:Binging区别不大. <TextBox x:Name="textBox" ...

  4. UVa1630,Folding

    区间dp,记忆化搜就可以 st为原串 dp[p][q]存st[p]~st[q]的最优长度,f[p][q]存对应的最优串 从(0,len-1)开始搜,f[0][len-1]为所求ans,回溯条件为p== ...

  5. 【JDK1.8】JDK1.8集合源码阅读——HashMap

    一.前言 笔者之前看过一篇关于jdk1.8的HashMap源码分析,作者对里面的解读很到位,将代码里关键的地方都说了一遍,值得推荐.笔者也会顺着他的顺序来阅读一遍,除了基础的方法外,添加了其他补充内容 ...

  6. LINUX 笔记-ps命令

    使用该命令能确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME ...

  7. 启动报错 Unsupported major.minor version 51.0

    Unsupported major.minor version 51.0错误, 是使用jdk6启动jdk7编译的项目,更换jdk7就好了,或者用jdk6重新打包项目. 解决起来也很方便:打开excli ...

  8. Java并发编程--线程池

    1.ThreadPoolExecutor类 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,下面我们来看一下ThreadPoolExecuto ...

  9. CSS选择器汇总

    id选择器 #id 类选择器 .class 标签选择器 div, h1, p 相邻选择器 h1 + p 子选择器 ul > li 后代选择器 li a 通配符选择器 * 属性选择器 a[rel= ...

  10. 特征提取方法: one-hot 和 IF-IDF

    one-hot 和 IF-IDF是目前最为常见的用于提取文本特征的方法,本文主要介绍两种方法的思想以及优缺点. 1. one-hot 1.1 one-hot编码 什么是one-hot编码?one-ho ...