首页 > 其他 > 详细

ReactiveCocoa-基础

时间:2014-03-18 13:02:27      阅读:517      评论:0      收藏:0      [点我收藏+]
   //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(@"按钮被点击了");
    }];
    

ReactiveCocoa-基础,布布扣,bubuko.com

ReactiveCocoa-基础

原文:http://blog.csdn.net/fucheng56/article/details/21445525

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!