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. Lustre文件系统测试——obdfilter-survey测试

    Lustre文件系统测试--obdfilter-survey测试 介绍 该测试主要是在lustre文件系统工作环境下进行,将直接在ost上生成工作负载模拟并行文件访问,可准确检测盘阵在lustre文件 ...

  2. 分享一个.NET加密工具NetEncryptor v2.1.6(破解版)

    在国外论坛闲逛,无意间看到一个.NET 加密工具.看了官网的介绍,感觉挺有意思,于是下载下来研(破)究(解)了一番. 官网地址:http://www.infralution.com/products/ ...

  3. maven基本基础知识及命令学习-1

    Maven概述:Maven是很有效的项目管理工具,maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目构建.报告和文档的软件项目管理工具.统一管理环境,架包等. 一 maven下载 ...

  4. grunt-contrib-connect自动刷新html页面

    grunt-contrib-connect可以在我们开发的时候自动刷新页面,省去了手动刷新的时间. 下面说一下如何配置grunt-contrib-connect 1.下载插件包 npm install ...

  5. open-falcon Agent配置文件修改hostname后,还是有其他名称的endpoint

    问题 open-falcon Agent在配置文件修改hostname后,log日志中还是发现其他名称的endpoint. 原因 Graph, Gateway组件会引用goperfcounter(gi ...

  6. nginx虚拟机配置(支持php)

    由于本人水平有限,以下记录仅作参考. 下面贴出我的一份正常运行的nginx服务器虚拟机配置./usr/local/nginx/conf/vhost/www.xsll.com.conf server { ...

  7. 一条咸鱼的梦--python

    毕业到现在已经有一年多了,或者说已经工作了一年多,这样以一个社会人的说法比较贴切吧.工作的这段时间里,我曾经有无数次的在问我该干什么,我想干什么,这好像一个深奥的哲学问题,好像并不是只有我一个毕业生思 ...

  8. 0_Simple__cudaOpenMP

    在OpenMP的多线程程序中,各线程分别调用CUDA进行计算.OpenMP的简单示例. ▶ 源代码: #include <omp.h> #include <stdio.h> # ...

  9. oracle数据库显示所有用户方法

    sql>show user查看自己的是哪个用户sql>select * from all_users; 查询所有用户sql>select * from user_users;查询当前 ...

  10. ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证

    OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层. 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R ...