ReactiveCoca(iOS)简单介绍

一、概述

ReactiveCocoa由两大主要部分组成:signals(RACSignal)和sequences(RACSequence)。

signal 和sequence都是streams,他们共享很多相同的方法。
ReactiveCocoa在功能上做了语义丰富
一致性强的一致性设计:signal是push驱动的stream,sequence是pull驱动的stream。

RACSignal

  • 异步控制或者事件驱动的数据源:
    Cocoa编程中大多数时候会关注用户事件或应用状态改变产生的影响

  • 链式依赖操作:
    网络请求是最常见的依赖性样例,前一个对server的请求完成后,下一个请求才能构建。

  • 并行独立操作:
    独立的数据集要并行处理,随后还要把他们合成一个最终结果。这在Cocoa中很常见,特别是涉及到同步动作时。

Signal会触发它们的subsciber三种不同类型的事件:

  • 下一个 事件从stream中提供一个新值。不像Cocoa集合,它是完全可用的,甚至一个signal可以包含nil。
  • 错误 事件会在一个signal结束之前被标示出来这里有一个错误。这种事件可能包含一个NSError对象来标示什么发生了错误。错误必须被特殊处理——错误不会被包含在stream的值里面。
  • 完成 事件标示signal成功结束,不会再有新的值会被加入到stream当中。完成事件也必须被单独控制——它不会出现在stream的值里面。
    一个signal的生命由很多下一个(next)事件和一个错误(error)或完成(completed)事件组成(后两者不同时出现)。

RACSequence

  • 简单集合转换: 你会痛苦的发现Foundation库中没有类似map和filter、fold、reduce等高级函数。

Sequence是一种集合,很像NSArray。但和数组不同的是,一个sequence里的值默认是延迟加载的(只有需要的时候才加载),这样的话如果sequence只有一部分被用到,那么这种机制就会提高性能。像Cocoa的集合类型一样,sequence不接受nil值。

RACSequence允许任意Cocoa集合,统一且显式地进行操作。

RACSequence *normalizedLongWords = [[words.rac_sequence
filter:^ BOOL (NSString *word) {
return [word length] >= 10;
}]
map:^(NSString *word) {
return [word lowercaseString];
}];

二、简单比较

RAC 与 KVO

Key-Value Observing是Cocoa所有魔法的核心,它被广泛应应用在ReactiveCocoa对于属性变化的影响动作中。然而KVO用起来既不简单也不开心:它的API有很多过度设计的参数,以及缺乏方便的block方式调用。

RAC 与 Bingdings

Bindings也是黑魔法。

虽然对 OS X控制的要点就是Bindings,但是它的意义在近年来越来越没那么重要了,因为焦点已经转移到了iOS和UIKit,这些Bingdings不支持的东西身上。Bingdings替代了大量的模版化的无趣代码,允许在Interface Builder 中完成代码,但严格上说还是比较有局限性的,并且无法debug。RAC提供了一种简洁易懂、扩展性强的以代码为基础的API来运行在iOS,目标就是取代所有在OS X能用Bingdings实现的神奇功能。

三、简单使用

先上demo ReactiveCocoaDemo

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值