ReactiveCocoaReactiveCocoa研究奔跑吧 iOS

ReactiveCocoa 优秀博客阅读笔记

2016-07-09  本文已影响565人  wg689

**推荐:ReactiveCocoa和MVVM专题,汇聚一些优秀相关博客 **

为梦想每天前行(与本文无关)

ReactiveCocoa为事件定义了一个标准接口,从而可以使用一些基本工具来更容易的连接、过滤和组合。如果你对上面说的还比较疑惑,那还是继续往下看吧。

一 )函数响应式编程名称的由来

ReactiveCocoa结合了几种编程风格:

所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。

二 )ReactiveCocoa作用

在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。比如按钮的点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供的方式。其实这些事件,都可以通过RAC处理ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里非常符合我们开发中高聚合,低耦合的思想

三) 信号的逻辑图

FRP_ReactiveCocoa_large.png

核心概念是RACSignal,相当于一个信号管道,接收信号源的信号,将信号依次发送给

四 ) RAC 和MVVM 结合使用图

MVVMReactiveCocoa.png

五 RAC 简单实用二十例

ReactiveCocoa简单使用20例 超级值得一看和尝试

六 ) ReactiveCocoa常见类。

学习框架首要之处:个人认为先要搞清楚框架中常用的类,在RAC中最核心的类RACSiganl,搞定这个类就能ReactiveCocoa开发了。

6.1RACSiganl

信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据。注意信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。

默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发
如何订阅信号:调用信号RACSignal的subscribeNext就能订阅。

6.2RACSubscriber

:表示订阅者的意思,用于发送信号,这是一个协议,不是一个类,只要遵守这个协议,并且实现方法才能成为订阅者。通过create创建的信号,都有一个订阅者,帮助他发送数据。

6.3RACDisposable

用于取消订阅或者清理资源,当信号发送完成或者发送错误的时候,就会自动触发它。
使用场景
:不想监听某个信号时,可以通过它主动取消订阅信号。

6.4RACSubject

:RACSubject:信号提供者,自己可以充当信号,又能发送信号。

6.6RACTuple

元组类,类似NSArray,用来包装值.

6.7RACSequence

:RAC中的集合类,用于代替NSArray,NSDictionary,可以使用它来快速遍历数组和字典。

6.8RACCommand

RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程。

使用场景

监听按钮点击,网络请求

6.9RACMulticastConnection

用于当一个信号,被多次订阅时,为了保证创建信号时,避免多次调用创建信号中的block,造成副作用,可以使用这个类处理。

6.10 RACScheduler

RAC中的队列,用GCD封装的。

6.11 RACUnit

表⽰stream不包含有意义的值,也就是看到这个,可以直接理解为nil.

6.12RACEvent

把数据包装成信号事件(signal event)。它主要通过RACSignal的-materialize来使用,然并卵。

七).ReactiveCocoa开发中常见用法。

7.1 代替代理:

rac_signalForSelector 用于替代代理。

7.2 代替KVO :

rac_valuesAndChangesForKeyPath 用于监听某个对象的属性改变。

7.3 监听事件:

rac_signalForControlEvents 用于监听某个事件。

7.4 代替通知:

rac_addObserverForName 用于监听某个通知。

7.5 监听文本框文字改变:

rac_textSignal 只要文本框发出改变就会发出这个信号。

7.6 处理当界面有多次请求时,需要都获取到数据时,才能展示界面

八).ReactiveCocoa常见宏。

8.1RAC

(TARGET, [KEYPATH, [NIL_VALUE]])用于给某个对象的某个属性绑定。// 只要文本框文字改变,就会修改label的文字 RAC(self.labelView,text) = _textField.rac_textSignal;

8.2RACObserve(self, name)

:监听某个对象的某个属性,返回的是信号。
[RACObserve(self.view, center) subscribeNext:^(id x) { NSLog(@"%@",x); }];

8.3@weakify(Obj)和@strongify(Obj)

,一般两个都是配套使用,在主头文件(ReactiveCocoa.h
)中并没有导入,需要自己手动导入,RACEXTScope.h
才可以使用。但是每次导入都非常麻烦,只需要在主头文件自己导入就好了。

8.4RACTuplePack

:把数据包装成RACTuple(元组类)
// 把参数中的数据包装成元组 RACTuple *tuple = RACTuplePack(@10,@20);

8.5RACTupleUnpack

:把RACTuple(元组类)解包成对应的数据。
// 把参数中的数据包装成元组 RACTuple *tuple = RACTuplePack(@"xmg",@20); // 解包元组,会把元组的值,按顺序给参数里面的变量赋值 // name = @"xmg" age = @20 RACTupleUnpack(NSString *name,NSNumber *age) = tuple;

参考资料
ReactiveCocoa之基础篇
ReactiveCocoa之进阶篇
函数响应式编程


上一篇下一篇

猜你喜欢

热点阅读