码迷,mamicode.com
首页 > 其他好文 > 详细

ReactiveCocoa -基础知识一(参考网友)

时间:2015-06-04 11:12:27      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:

1:登录验证
#import <Foundation/Foundation.h>
typedef void (^SignInRespose) (BOOL result);
@interface TJSignInRespose : NSObject
+ (void)signInWithUsername:(NSString *)username password:(NSString *)password complete:(SignInRespose)completeBlock;
@end
#import "TJSignInRespose.h"

@implementation TJSignInRespose
+ (void)signInWithUsername:(NSString *)username password:(NSString *)password complete:(SignInRespose)completeBlock
{

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        BOOL result = [username isEqualToString:@"user"] && [password isEqualToString:@"password"];
        completeBlock(result);
    });
}
@end
2具体实现
#import "ReactiveCocoa.h"
#import "ViewController.h"
#import "TJSignInRespose.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textFieldUserName;
@property (weak, nonatomic) IBOutlet UITextField *textFieldPwd;
@property (weak, nonatomic) IBOutlet UILabel *lblRemind;
@property (weak, nonatomic) IBOutlet UIButton *btnSign;


@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    /**添加验证用户名信号*/
    RACSignal *userNameSignal = [self.textFieldUserName.rac_textSignal map:^id(NSString *userName) {
        
        return @([self isValidateUserName:userName]);
    }];
    /**添加验证用户密码信号*/
    RACSignal *userPwdSingal = [self.textFieldPwd.rac_textSignal map:^id(NSString *userPwd) {
        
        return @([self isValidateUserPwd:userPwd]);
        
    }];
    /**设置用户名文本框背景颜色*/
    RAC(self.textFieldUserName,backgroundColor) = [userNameSignal map:^id(NSNumber *userName) {
        
        return [userName boolValue]?[UIColor clearColor]:[UIColor yellowColor];
        
    }];
    /**设置密码文本框背景颜色*/
    RAC(self.textFieldPwd,backgroundColor) = [userPwdSingal map:^id(NSNumber *userPwd) {
        return [userPwd boolValue]?[UIColor clearColor]:[UIColor yellowColor];
        
    }];
    /**判断登录按钮是否可用*/
    RAC(self.btnSign,enabled) = [RACSignal combineLatest:@[userPwdSingal,userNameSignal
                                                               ] reduce:^id(NSNumber *userName,NSNumber *userPwd){
                                                                   
                                                                   return @([userName boolValue]&&[userPwd boolValue]);
                                                                   
                                                               }];
    /**为登录按钮添加事件*/
    [[[self.btnSign rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^RACStream *(id value) {
        return [self signInSignal];
    }] subscribeNext:^(id value) {
        BOOL result = [value boolValue];
        self.lblRemind.text = result?@"登录成功":@"登录失败";
    }];

    RAC(self.lblRemind,text) = [RACSignal combineLatest:@[userNameSignal,userPwdSingal] reduce:^id(NSNumber *userName,NSNumber *userPwd){
        BOOL result = [userName  boolValue]&&[userPwd boolValue];
        return result?@"":@"请输入密码或者用户名";
    }];


}
- (BOOL)isValidateUserName:(NSString *)userName
{
    return userName.length>3;

}
- (BOOL)isValidateUserPwd:(NSString *)userPwd
{
    return userPwd.length>3;
    
}
/**
 *  登录认证
 *
 *  @return 实现RACSubscriber协议的subscriber(订阅者)
 */
- (RACSignal *)signInSignal
{
   return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
       
       [TJSignInRespose signInWithUsername:self.textFieldUserName.text
                                  password:self.textFieldPwd.text
                                  complete:^(BOOL result) {
                                      /**把登录结果传递给下一个管道*/
                                      [subscriber sendNext:@(result)];
                                      [subscriber sendCompleted];
                                      
                                  }];
       return nil;
   }];

}

    
    
    


@end

技术分享

ReactiveCocoa -基础知识一(参考网友)

标签:

原文地址:http://www.cnblogs.com/thbbsky/p/4550961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!