ReactiveCocoa-基础

来源:互联网 发布:中国农村淘宝研究报告 编辑:程序博客网 时间:2024/06/18 13:39
   //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(@"按钮被点击了");    }];    

0 0
原创粉丝点击