RAC总结

作者: RunningTeemo | 来源:发表于2017-11-23 11:29 被阅读0次

1、常见使用
基本操作

// 最简单的信号处理(类似Next 的 还有 error,compelete 2种)
    [[self.nameField rac_textSignal] subscribeNext:^(id x) {
        // 文本信号值,x 。可供处理,
        NSLog(@"%@",x);
    }];

对信号的简单处理(过滤)

// 过滤器
    [[[self.nameField rac_textSignal] filter:^BOOL(id value) {
        NSString *str = value;
        return @(str.length > 3);// 当满足条件时,产生信号值x,供下面处理,
    }]
    subscribeNext:^(id x) {
         NSLog(@"%@",x);
    }];

修改信号值

[[[self.nameField rac_textSignal] map:^id(id value) {
        NSString *str = value;
        NSInteger len = str.length;
        return [UIColor colorWithRed:len * 10. /255. green:len * 10. /255. blue:len * 10. /255. alpha:1];
        // 根据原有信号值,产生新的信号值 x ,供下面处理
    }]
    subscribeNext:^(id x) {
        NSLog(@"%@",x);
        self.nameField.textColor = x;
    }];

组合信号

    NSArray *signals = @[self.accountTF.rac_textSignal,self.pwdTF.rac_textSignal];
    //第一个参数:信号的数组 第二个参数block
    //组合信号
    RACSignal *combineSignal = [RACSignal combineLatest:signals reduce:^id(NSString *username,NSString *pwd){
    //当用户名和密码长度都大于1时,返回yes
        BOOL btnEnable = (username.length > 0 && pwd.length > 0);
        return @(btnEnable);
    }];

    [combineSignal subscribeNext:^(id x) {
       NSLog(@"%@",x);//这里订阅的是组合信号
       //设置按钮的可用状态
       self.loginBtn.enabled = [x boolValue];
    }];

信号值变化才产生新信号(相同赋值,)

[[[self.nameField rac_textSignal] distinctUntilChanged] subscribeNext:^(id x) {
        NSLog(@"%@",x);// 信号值不变时,不产生新的信号(注:用在这里不合适,只是演示,而且这个比较好用)
    }];

2、RAC赋值
因为信号本身有信号值,但是有不能直接用,所以就有RAC()
简单赋值

RAC(self.nameField, backgroundColor) = [[self.nameField rac_textSignal] map:^id(id value) {
        NSString *str = value;
        NSInteger len = str.length;
        return [UIColor colorWithRed:len * 10. /255. green:len * 10. /255. blue:len * 10. /255. alpha:1];//
    }];// 信号本身就有值,所有使用 RAC() 宏,可以直接使用信号的值,对对象进行赋值。

多信号赋值

RAC(self.loginBtn,enabled) = [RACSignal combineLatest:@[[self.nameField rac_textSignal],[self.passwordField rac_textSignal]]
                                                   reduce:^id(NSString *name,NSString *password){

                                                       return @(name.length > 0 && password.length > 3);
                                                   }];// 多信号的联合控制,reduce 用于传多个信号的值,并返回一个新的信号

3、系统信号量
UIControl

 [[self.testBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];

NSNotification

// notification 监听通知信号,都不需要 add  remove
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardDidChangeFrameNotification object:nil] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];

KVC/KVO

// KVC 所有信息
    [[self.testLabel rac_valuesForKeyPath:@"text" observer:self] subscribeNext:^(id x) {
        NSLog(@"value - %@",x);
    }];

    // KVC 选择信息
    [[self.testLabel rac_valuesAndChangesForKeyPath:@"text" options:NSKeyValueObservingOptionNew observer:self] subscribeNext:^(id x) {
        NSLog(@"change - %@",x);
    }];

    // 简写
    [RACObserve(self.testLabel, text) subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];

手势

// 手势
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
    [self.view addGestureRecognizer:tap];
    [[tap rac_gestureSignal] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];

https://hacpai.com/article/1481187709262

相关文章

  • RAC

    ReactiveCocoa入门 学习RAC小记-适合给新手看的RAC用法总结RAC稍深入-适合新手学习RAC iO...

  • RAC总结

    ReactiveCocoa 一 、导入框架 如果是Swift要使用动态库,要加入use_frameworks!这行...

  • RAC总结

    ReactiveCocoa 是一个函数响应式编程(FRP)的框架。 一、导入框架 如果是纯OC项目,使用pod '...

  • RAC总结

    一.信号类:表示有数据产生 RACSignal RACDynamicSignal -> didSubscribe(...

  • RAC总结

    1、常见使用基本操作 对信号的简单处理(过滤) 修改信号值 组合信号 信号值变化才产生新信号(相同赋值,) 2、R...

  • RAC总结

    之前总结了项目中的MVVM框架,有朋友问我详细的viewModel中的业务逻辑实现,记得之前在里面说过viewMo...

  • RAC总结

    https://www.jianshu.com/p/89ba5fd25762

  • RAC自己练习下

    ReactiveCocoa使用个人总结 ReactiveCocoa简介 ReactiveCocoa(简称RAC)是...

  • RAC基本用法

    最近公司要用MVVM+RAC重构项目,所以就对RAC开发中的基本用法总结了一下。 RACSignal RACSig...

  • RAC使用总结

    RAC使用测试Demo下载:github.com/FuWees/WPRACTestDemo 1.ReactiveC...

网友评论

      本文标题:RAC总结

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