无人机中的城堡 2017-11-29
RAC(ReactiveCocoa)使用方法(一)
RAC(ReactiveCocoa)使用方法(二)
最近回顾了一下ReactiveCocoa
的方法,也看了一些人的文章,现写篇文章总结一下。
现在这个库最新支持Swift,如果你要是用Cocoapods
的话不指定版本它默认是下载Swift版本,如果依旧想用OC版本就指定一个版本,最好是V2.5版本及以下,否则可能会出现错误。最近我试的是V2.5,可以正常使用。
项目中用Cocoapods
使用:pod "ReactiveCocoa", '~> 2.5'
那什么是RAC勒?想必大家随便谷歌一下就一大片这个概念和文章。
RAC具有函数响应式编程特性,由Matt Diephouse
开源的一个应用于iOS和OS X的新框架。
因为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原理,内部怎么实现还要大家去阅读源码了。
1、RACSiganl
信号类,表示将来有数据传递,有数据改变,信号内部接收到数据,就会马上发出数据,外部就可以接收到数据了。就像刚刚上面的例子一样。
2、默认信号都是冷信号,就是这个值改变了它不会触发,只有订阅(调用信号RACSignal的subscribeNext订阅)了这个信号,这个信号才会变为热信号(值一改变就触发),才会触发。
RACSiganl简单使用:
```
// 1.创建信号
RACSignal siganl = [RACSignal createSignal:^RACDisposable (id subscriber) {
<code>// 每当有订阅者订阅信号,就会调用block。// 2.发送信号[subscriber sendNext:@"我是一个信号