美文网首页
RACCommand:作用、定义、DEMO

RACCommand:作用、定义、DEMO

作者: 凯司机 | 来源:发表于2021-05-13 21:25 被阅读0次

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;
}

相关文章

网友评论

      本文标题:RACCommand:作用、定义、DEMO

      本文链接:https://www.haomeiwen.com/subject/izbirltx.html