RACCommand:作用、定义、DEMO
@property (nonatomic, strong) UITextField *textField;
@property (nonatomic, strong) UIButton *testButton;
- (void)test45 {
RACSignal *(^countSignal)(NSNumber *count) = ^RACSignal *(NSNumber *count) {
RACSignal *timeSignal = [RACSignal interval:1 onScheduler:RACScheduler.mainThreadScheduler];
RACSignal *counterSignal = [[timeSignal scanWithStart:count reduce:^id(NSNumber *running, id next) {
return @(running.integerValue - 1);
}] takeUntilBlock:^BOOL(NSNumber *x) {
return x.integerValue < 0;
}];
return [counterSignal startWith:count];
};
RACSignal *enableSignal = [self.textField.rac_textSignal map:^id(NSString *value) {
return @(value.length == 11);
}];
RACCommand *command = [[RACCommand alloc] initWithEnabled:enableSignal signalBlock:^RACSignal *(id input) {
return countSignal(@10);
}];
RACSignal *counterStringSignal = [[command.executionSignals switchToLatest] map:^id(NSNumber *value) {
NSLog(@"counterStringSignal:%@",value);
return [value stringValue];
}];
RACSignal *resetStringSignal = [[command.executing filter:^BOOL(NSNumber *value) {
return !value.boolValue;
}] mapReplace:@"点击获取验证码"];
[self.testButton rac_liftSelector:@selector(setTitle:forState:) withSignals:[RACSignal merge:@[counterStringSignal, resetStringSignal]], [RACSignal return:@(UIControlStateNormal)], nil];
self.testButton.rac_command = command;
}
- (UITextField *)textField {
if (_textField == nil) {
_textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 64, 375, 50)];
_textField.backgroundColor = [UIColor whiteColor];
}
return _textField;
}
- (UIButton *)testButton {
if (_testButton == nil) {
_testButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 114, 375, 50)];
_testButton.backgroundColor = [UIColor redColor];
}
return _testButton;
}
网友评论