加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ReactiveCocoa-基础

发布时间:2020-12-15 05:27:23 所属栏目:百科 来源:网络整理
导读://subscribeNext:传递给下一个执行 [self.usernameTF.rac_textSignal subscribeNext:^(id x) { NSLog(@"%@",x); }]; //filter:过滤信号 [[self.usernameTF.rac_textSignal filter:^BOOL(NSString *name) { return name.length 3; }] subscribeNext:^(id x)
   //subscribeNext:传递给下一个执行
    [self.usernameTF.rac_textSignal subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
    
    //filter:过滤信号
    [[self.usernameTF.rac_textSignal filter:^BOOL(NSString *name) {
        return name.length > 3;
    }] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
    
    //map:转换信号的类型
    [[self.passwordTF.rac_textSignal map:^id(NSString *password) {
        return @(password.length);
    }] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
    
    
    //创建一个信号
    RACSignal *nameSignal = [self.usernameTF.rac_textSignal map:^id(NSString *name) {
        return @(name.length > 3);
    }];
    
    RACSignal *passwordSignal = [self.passwordTF.rac_textSignal map:^id(NSString *password) {
        return @(password.length > 4);
    }];
    
    //利用上一步所得的信号再进行条件判断
    //当不使用subscribeNext时上面的信号不会执行;
    [[nameSignal map:^id(NSNumber *nameValue) {
        return [nameValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];
    }] subscribeNext:^(UIColor *color) {
        self.usernameTF.backgroundColor = color;
    }];
    
    [[passwordSignal map:^id(NSNumber *passWordValue) {
        return [passWordValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];
    }] subscribeNext:^(UIColor *color) {
        self.passwordTF.backgroundColor = color;
    }];
    
    //RAC 宏允许您指定一个信号的输出对象的属性。 它需要两个参数,第一个是包含属性设置的对象,第二个是属性名。 每次信号发出下一个事件,是分配给给定属性的值。
    //下面这段代码与上面的作用相同
    RAC(self.usernameTF,backgroundColor) = [nameSignal map:^id(NSNumber *nameValue) {
        return [nameValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];
    }];
    
    RAC(self.passwordTF,backgroundColor) = [passwordSignal map:^id(NSNumber *passWordValue) {
        return [passWordValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];
    }];
    
    //结合信号
    RACSignal *siginSignal = [RACSignal combineLatest:@[nameSignal,passwordSignal] reduce:^id(NSNumber *nameValue,NSNumber *passWordValue){
        return @([nameValue boolValue] && [passWordValue boolValue]);
    }];
    
    [siginSignal subscribeNext:^(NSNumber *siginValue) {
        self.siginBtn.enabled = [siginValue boolValue];
    }];
    
    [[self.siginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        NSLog(@"按钮被点击了");
    }];
    

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读