【iOS】Reactive Cocoa介绍

Reactive Cocoa介绍

Reactive Cocoa定义了标准的事件接口,因此可以使用一些基本的工具来更容易的连接、过滤和组合。Reactive Cocoa结合了函数式编程和响应式编程的特点:

  • 函数式编程:将运算过程尽量写成一些列的函数调用。
  • 响应式编程:面对离散数据流以及对离散数据流进行操作。

函数响应式编程:将输入转化为输出在时间上的持续过程的一种方式。


传统范式 VS Reactive Cocoa

这是一个例子:在用户登录界面,有2个输入框(帐号和密码)和一个登录按钮。限制条件:当用户输完帐号和密码、并且登录的网络请求还未发出时,确定按钮才可以点击。

传统范式:

- (BOOL)isFormValid {
    return [self.usernameField.text length] > 0 &&
            [self.emailField.text length] > 0 &&
            [self.passwordField.text length] > 0 &&
            [self.passwordField.text isEqual:self.passwordVerificationField.text];
}

#pragma mark - UITextFieldDelegate

- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
    self.createButton.enabled = [self isFormValid];

    return YES;
}

Reactive Cocoa:

RACSignal *formValid = [RACSignal
  combineLatest:@[
    self.username.rac_textSignal,
    self.emailField.rac_textSignal,
    self.passwordField.rac_textSignal,
    self.passwordVerificationField.rac_textSignal
  ]
  reduce:^(NSString *username, NSString *email, NSString *password, NSString *passwordVerification) {
    return @([username length] > 0 && [email length] > 0 && [password length] > 8 && [password isEqual:passwordVerification]);
  }];

RAC(self.createButton.enabled) = formValid;

通过对比可以发现,在传统范式的例子中,逻辑被放在了很多方法里。而Reactive Cocoa中将判断表单输入是否合法的逻辑都整合为一串逻辑。


什么是Reactive Cocoa?

  • Github for mac客户端的副产物。
  • FRP在Cocoa框架下的实现。
  • 包含了Cocoa框架的多种组件。
  • 提供基于时间变化的数据流的组合和变换。
  • 简称RAC。

冷信号 VS 热信号

冷热信号的概念来源于.NET框架的Reactive Extensions(RX)中的Hot Observable和Cold Observable

冷信号:
冷信号是被动的,只有当你订阅的时候,它才会发布消息。冷信号只能一对一,当有不同的订阅者,消息是重新完整发送的。

热信号:
热信号是主动的,尽管你没有订阅事件,但是它会时刻推送。就像鼠标移动。热信号可以有多个订阅者,是一对多的。


RAC中的核心组件

  • RACSignal、RACSequence、RACStram
 RACSignal和RACSequence都是streams,它们之间共享很多方法。RACSignal是push驱动的stream,
 RACSequence是pull驱动的stream;
  • RACSubscriber
  • RACDisposable
  • RACScheduler
  • Cocoa框架适配工具

参考资料

1、https://www.raywenderlich.com/62699/reactivecocoa-tutorial-pt1
2、http://nshipster.cn/reactivecocoa/
3、http://tech.meituan.com/talk-about-reactivecocoas-cold-signal-and-hot-signal-part-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值