ReactiveCocoa的举例

来源:互联网 发布:网络用语打call的意思 编辑:程序博客网 时间:2024/06/03 22:01

原帖:http://www.cocoachina.com/ios/20150123/10994.html


-(void)initUI{    [self.txtUsername.rac_textSignal subscribeNext:^(id x) {        //NSLog(@"%@",x);    }];        RACSignal *validUsernameSignal=[self.txtUsername.rac_textSignal map:^id(NSString *text) {        return @([self isValidUsername:text]);    }];        RACSignal *validPasswordSignal=[self.txtPassword.rac_textSignal map:^id(NSString *text) {        return @([self isValidUsername:text]);    }];        RAC(self.txtUsername,backgroundColor)=[validUsernameSignal map:^id(NSNumber *usernameValid) {        return [usernameValid boolValue]?[UIColor clearColor]:[UIColor yellowColor];    }];        RAC(self.txtPassword,backgroundColor)=[validPasswordSignal map:^id(NSNumber *passwordValid) {        return [passwordValid boolValue]?[UIColor clearColor]:[UIColor yellowColor];    }];        RACSignal *signUpActiveSignal=[RACSignal combineLatest:@[validUsernameSignal,validPasswordSignal] reduce:^id(NSNumber *usernameValid,NSNumber *passwordValid){        return @([usernameValid boolValue]&&[passwordValid boolValue]);    }];        [signUpActiveSignal subscribeNext:^(NSNumber  *signupActive) {        if ([signupActive boolValue]) {            self.btnLogin.enabled=YES;            [self.btnLogin setBackgroundColor:[UIColor redColor]];        }        else        {            self.btnLogin.enabled=NO;            [self.btnLogin setBackgroundColor:[UIColor whiteColor]];        }    }];        [[[[self.btnLogin rac_signalForControlEvents:UIControlEventTouchUpInside]      doNext:^(id x) {          self.btnLogin.enabled=NO;      } ]            flattenMap:^id(id value) {          return [self signInSignal];      }]     subscribeNext:^(NSNumber  *signIn) {         self.btnLogin.enabled=YES;         BOOL success=[signIn boolValue];                  if (success) {             [Common addAlertViewWithTitel:@"登陆成功"];         }         else         {             [Common addAlertViewWithTitel:@"失败"];         }     }] ;    }-(RACSignal*)signInSignal{    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {        [self signInWithUserName:self.txtUsername.text password:self.txtPassword.text complete:^(BOOL success) {            [subscriber sendNext:@(success)];            [subscriber sendCompleted];        }];        return nil;    }];}-(void)signInWithUserName:(NSString*)username password:(NSString*)password complete:(ReturnBack)completeBlock{    dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, (int16_t)(NSEC_PER_SEC*2.0));    dispatch_after(time, dispatch_get_main_queue(), ^{        BOOL success=[username isEqualToString:@"user"]&&[password isEqualToString:@"password"];        completeBlock(success);    });}-(BOOL)isValidUsername:(NSString*)text{    return text.length>3;}


0 0