ReactiveCocoa 优秀博客阅读笔记

作者: wg689 | 来源:发表于2016-07-09 16:05 被阅读565次

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

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

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

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

    ReactiveCocoa结合了几种编程风格:

    • 函数式编程(Functional Programming):使用高阶函数,例如函数用其他函数作为参数.
    • 响应式编程(Reactive Programming):关注于数据流和变化传播。

    所以,你可能听说过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之进阶篇
    函数响应式编程


    相关文章

      网友评论

      本文标题:ReactiveCocoa 优秀博客阅读笔记

      本文链接:https://www.haomeiwen.com/subject/jdgrjttx.html