ReactiveCocoa 学习笔记(一)

1. subscribeNext

ReactiveCocoa signal(RACSignal)发送事件流给它的subscriber。目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。在本教程的第一部分,我们将会关注next事件。在第二部分,将会学习error和completed事件。

2. filter 可过滤事件流

    [[self.usernameTextField.rac_textSignal filter:^BOOL(id value) {
        NSString *text = value;
        return text.length > 3;
    }] subscribeNext:^(id x) {
        NSLog(@"%@", x);
编译运行,在text field只能怪输入几个字,你会发现只有当输入超过3个字符时才会有log。

3. map 操作可以转换信号

    [[[self.usernameTextField.rac_textSignal map:^id(NSString *text) {
        return @(text.length);
    }] filter:^BOOL(NSNumber *length) {
        return [length integerValue] > 3;
    }] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
转换原来的输入字符串 为 字符的长度个数了, 所以打印效果如下

2015-07-29 15:00:41.546 ReactiveCocoa_demo1[2541:975109] 4

2015-07-29 15:00:47.818 ReactiveCocoa_demo1[2541:975109] 5

4. RAC 提供的宏绑定

RAC(self.passwordTextField, backgroundColor) =
   [validPasswordSignal
     map:^id(NSNumber *passwordValid){
       return [passwordValid boolValue] ? [UIColor clearColor]:[UIColor yellowColor];
     }];

5.聚合信号  combineLatest:  reduce:

    RACSignal *singUpActiveSignal = [RACSignal combineLatest:@[validUserNameSignal, validPasswordSingnal] reduce:^id(NSNumber*usernameValid, NSNumber *passwordValid){
        return @([usernameValid boolValue]&&[passwordValid boolValue]);
    }];
    [singUpActiveSignal subscribeNext:^(NSNumber *signupActive) {
        self.signInButton.enabled = [signupActive boolValue];
    }];

6. 在外部信号的 subscribeNext:block里订阅内部信号

只需要把map操作改成flattenMap就可以了

下面的例子中,如果还是map 操作的话,接收到的是uibutton的点击事件流。 想要接收内部 return [self signInSignal] 这个事件流,就需要 前面 由map 改为 flattemMap.

    [[[self.signInButton rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^id(id x) {

        return [self signInSignal];

    }] subscribeNext:^(NSNumber *signedIn) {

        BOOL success = [signedIn boolValue];

        self.signInFailureText.hidden = success;

        if (success) {

            [self performSegueWithIdentifier:@"signInSuccess" sender:self];

        }

    }];

7.do Next 操作 就是赋加操作, 在点击按钮的同事,想要处理一些操作
由第6点的代码 转变为如下代码,加入了do next 操作
    [[[[self.signInButton rac_signalForControlEvents:UIControlEventTouchUpInside] doNext:^(id x) {
        self.signInButton.enabled = NO;
        self.signInFailureText.hidden = YES;
    }] flattenMap:^RACStream *(id value) {
        return [self signInSignal];
    }] subscribeNext:^(NSNumber *signedIn) {
        self.signInButton.enabled = YES;
        BOOL success = [signedIn boolValue];
        self.signInFailureText.hidden = success;
        if (success) {
            [self performSegueWithIdentifier:@"signInSuccess" sender:self];
        }
    }];

总结,好了,第一部分先学到这里。下面是原文链接。
cococachina主站/ios/20150123/10994.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值