ReactiveCocoa简单教程
ReactiveCocoa:首先使用Pod前,先查看一下版本信息,选择好需要的版本,特别是使用objc时候,不需要选择太新的,主要是已经不再更新了,在这里,我选择的是一个2.0版本,版本特性在大多数博文中都有详细介绍,我就不一一列举了。 PodFIle文件设置:当然,只是简单的 也是可以的,我这样写无非是万无一失的,之后Pod update等待下载完成就可以。 在这之后,我们可以简单进行测试一下一些特性: 在这里我实现了一个简单的登录界面demo: //
// ViewController.m
// Test
//
// Created by 林之杰 on 15/11/18.
// Copyright ? 2015年 林之杰. All rights reserved.
//
#import "ViewController.h"
#import "RWDummySignInService.h"
#import <ReactiveCocoa/ReactiveCocoa.h>
@interface ViewController ()
@property (strong,nonatomic) IBOutlet UITextField *newa;
@property (strong,nonatomic) IBOutlet UITextField *usrname;
@property (strong,nonatomic) IBOutlet UITextField *password;
@property (strong,nonatomic) IBOutlet UIButton *button;
@property (strong,nonatomic) RWDummySignInService *signInService;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.signInService = [RWDummySignInService new];
// [self.usrname.rac_textSignal subscribeNext:^(id text) {
// NSLog(@"%@",text);
// }];
//
//
//
RACSignal *signal = [self createSignal];
[signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
// [[self.newa.rac_textSignal filter:^BOOL(NSString *text) {
// return text.length > 3;
// }] subscribeNext:^(id x) {
// NSLog(@"%@",x);
// }];
// [[[self.newa.rac_textSignal map:^id(NSString *text) {
// return @(text.length);
// }] filter:^BOOL(NSString *length) {
// return [length integerValue] >3;
// }] subscribeNext:^(id x) {
// NSLog(@"%@",x);
// }];
RACSignal * a = [self.usrname.rac_textSignal map:^id(NSString *text) {
return @([self isValidUsername:text]);
}];
RACSignal * b = [self.password.rac_textSignal map:^id(NSString *text) {
return @([self isValidPassword:text]);
}];
RAC(self.usrname,backgroundColor) =
[a map:^id(NSNumber *usernameValid) {
return [usernameValid boolValue]?[UIColor whiteColor]:[UIColor yellowColor];
}];
RAC(self.password,backgroundColor) =
[b map:^id(NSNumber *passwordValid) {
return [passwordValid boolValue]?[UIColor whiteColor]:[UIColor yellowColor];
}];
RACSignal *signUpActivateSignal =
[RACSignal combineLatest:@[a,b] reduce:^id(NSNumber *username,NSNumber *password){
return @([username boolValue] && [password boolValue]);
}];
[signUpActivateSignal subscribeNext:^(NSNumber *signupActive) {
self.button.enabled = [signupActive boolValue];
}];
[[[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^id(id value) {
return [self singInSignal];
}] subscribeNext:^(id x) {
NSLog(@"Sign in result:%@",x);
}];
// Do any additional setup after loading the view,typically from a nib.
}
- (BOOL)isValidUsername:(NSString *)username {
return username.length > 3;
}
- (BOOL)isValidPassword:(NSString *)password {
return password.length > 3;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (RACSignal*) createSignal{
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"signal is created");
return nil;
}];
}
-(RACSignal *)singInSignal {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[self.signInService
signInWithUsername:self.usrname.text
password:self.password.text
complete:^(BOOL success) {
[subscriber sendNext:@(success)];
[subscriber sendCompleted];
}];
return nil;
}];
}
@end
好了,讲到这里,更多高级特性请移步以下链接学习: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |