RAC使用

197 阅读1分钟

多绑定

UITextField *nameTextField
UITextField *pwdTextField
UIButton *loginButton

[[RACSignal combineLatest:@[nameTextField.rac_textSignal, pwdTextField.rac_textSignal]
                       reduce:^id(NSString *name, NSString *pwd) {
                           return @(name.length > 0 && pwd.length > 0);
                       }] subscribeNext:^(id x) {
                           self.loginButton.enabled = [x boolValue];
                       }];


实现方式二:
RACSignal *signal = [RACSignal combineLatest:@[nameTextField.rac_textSignal, pwdTextField.rac_textSignal] reduce:^id _Nonnull(NSString *name , NSString *pwd){
        return @(name.length && pwd.length);
    }];
RAC(loginButton,enabled) = signal;

多个请求全部完成后再刷新 UI

- (void)liftSelector {
    RACSignal *hotSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        NSLog(@"请求热销模块数据");
        [subscriber sendNext:@"热销模块数据"];
        return nil;
    }];
    RACSignal *newSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        NSLog(@"请求最新模块数据");
        [subscriber sendNext:@"最新模块数据"];
        return nil;
    }];
    // withSignalsFromArray 中的所有信号都发送数据后才会执行 selector, selector 的参数就是每个信号发送的数据
    [self rac_liftSelector:@selector(updateUIWithHotData:newData:) withSignalsFromArray:@[hotSignal, newSignal]];
}

- (void)updateUIWithHotData:(NSString *)hotData newData:(NSString *)newData {
    // 刷新 UI
    NSLog(@"%@", hotData);
    NSLog(@"%@", newData);
}