RAC其他

RACScheduler:RAC中的队列,用GCD封装的。
RACUnit :表⽰stream不包含有意义的值,也就是看到这个,可以直接理解为nil.
RACEvent: 把数据包装成信号事件(signal event)。它主要通过RACSignal的-materialize来使用。

self.navigationItem.rightBarButtonItem.rac_command = self.viewModel.loginCommand;

[[self.viewModel.loginCommand.executionSignals flattenMap:^(RACSignal *execution) {
    // Sends RACUnit after the execution completes.
    return [[execution ignoreValues] concat:[RACSignal return:RACUnit.defaultUnit]];
}] subscribeNext:^(id _) {
    @strongify(self);
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}];
[self.viewModel.loginCommand.errors subscribeNext:^(id x) {
    NSLog(@"Login error: %@", x);
}];

self.navigationItem.leftBarButtonItem.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [RACSignal createSignal:^RACDisposable *(id subscriber) {
@strongify(self);

        [self.presentingViewController dismissViewControllerAnimated:YES completion:^{
            [subscriber sendCompleted];
        }];
        
        return nil;
    }];
}];

concat连接:
RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(idsubscriber) {
[subscriber sendNext:@"我恋爱啦"];
[subscriber sendCompleted];
return nil;
}];
RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(idsubscriber) {
[subscriber sendNext:@"我结婚啦"];
[subscriber sendCompleted];
return nil;
}];
[[signalA concat:signalB] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];

flattenMap:
[[[[RACSignal createSignal:^RACDisposable *(idsubscriber) {
NSLog(@"打蛋液");
[subscriber sendNext:@"蛋液"];
[subscriber sendCompleted];
return nil;
}] flattenMap:^RACStream (NSString value) {
return [RACSignal createSignal:^RACDisposable *(idsubscriber) {
NSLog(@"把%@倒进锅里面煎",value);
[subscriber sendNext:@"煎蛋"];
[subscriber sendCompleted];
return nil;
}];
}] flattenMap:^RACStream (NSString value) {
return [RACSignal createSignal:^RACDisposable *(idsubscriber) {
NSLog(@"把%@装到盘里", value);
[subscriber sendNext:@"上菜"];
[subscriber sendCompleted];
return nil;
}];
}] subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
then:
[[[[RACSignal createSignal:^RACDisposable *(idsubscriber) {
NSLog(@"打开冰箱门");
[subscriber sendCompleted];
return nil;
}] then:^RACSignal *{
return [RACSignal createSignal:^RACDisposable *(idsubscriber) {
NSLog(@"把大象塞进冰箱");
[subscriber sendCompleted];
return nil;
}];
}] then:^RACSignal *{
return [RACSignal createSignal:^RACDisposable *(idsubscriber) {
NSLog(@"关上冰箱门");
[subscriber sendCompleted];
return nil;
}];
}] subscribeCompleted:^{
NSLog(@"把大象塞进冰箱了");
}];

delay延迟:
[[[RACSignal createSignal:^RACDisposable (idsubscriber) {
NSLog(@"等等我,我还有10秒钟就到了");
[subscriber sendNext:nil];
[subscriber sendCompleted];
return nil;
}] delay:10] subscribeNext:^(id x) {
NSLog(@"我到了");
}];
interval定时:
[[RACSignal interval:60
60*8 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {
NSLog(@"吃药");
}];

timeout超时:
[[[RACSignal createSignal:^RACDisposable (idsubscriber) {
[[[RACSignal createSignal:^RACDisposable (idsubscriber) {
NSLog(@"我快到了");
[subscriber sendNext:nil];
[subscriber sendCompleted];
return nil;
}] delay:60
70] subscribeNext:^(id x) {
[subscriber sendNext:nil];
[subscriber sendCompleted];
}];
return nil;
}] timeout:60
60 onScheduler:[RACScheduler mainThreadScheduler]] subscribeError:^(NSError *error) {
NSLog(@"等了你一个小时了,你还没来,我走了");
}];

retry重试:
__block int failedCount = 0;
[[[RACSignal createSignal:^RACDisposable *(idsubscriber) {
if (failedCount < 100) {
failedCount++;
NSLog(@"我失败了");
[subscriber sendError:nil];
}else{
NSLog(@"经历了数百次失败后");
[subscriber sendNext:nil];
}
return nil;
}] retry] subscribeNext:^(id x) {
NSLog(@"终于成功了");
}];

throttle节流:
[[[RACSignal createSignal:^RACDisposable *(idsubscriber) {
[subscriber sendNext:@"旅客A"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[subscriber sendNext:@"旅客B"];
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[subscriber sendNext:@"旅客C"];
[subscriber sendNext:@"旅客D"];
[subscriber sendNext:@"旅客E"];
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[subscriber sendNext:@"旅客F"];
});
return nil;
}] throttle:1] subscribeNext:^(id x) {
NSLog(@"%@通过了",x);
}];

2015-08-16 22:08:45.677 Test[2618:83764] 旅客A
2015-08-16 22:08:46.737 Test[2618:83764] 旅客B
2015-08-16 22:08:47.822 Test[2618:83764] 旅客E
2015-08-16 22:08:48.920 Test[2618:83764] 旅客F

takeUntil条件:
[[[RACSignal createSignal:^RACDisposable *(idsubscriber) {
[[RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {
[subscriber sendNext:@"直到世界的尽头才能把我们分开"];
}];
return nil;
}] takeUntil:[RACSignal createSignal:^RACDisposable *(idsubscriber) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"世界的尽头到了");
[subscriber sendNext:@"世界的尽头到了"];
});
return nil;
}]] subscribeNext:^(id x) {
NSLog(@"%@", x);
}];

你可能感兴趣的:(RAC其他)