RACSignal的使用基础
2019-07-02 本文已影响0人
Jimmy_L_Wang
获得信号的方式
-
单元信号
RACSignal *signal1 = [RACSignal return:@"Some Value"]; RACSignal *signal2 = [RACSignal error:errorObject]; RACSignal *signal3 = [RACSignal empty]; RACSignal *signal4 = [RACSignal never];
-
动态信号
RACSignal *signal5 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { [subscriber sendNext:@1]; [subscriber sendNext:@2]; [subscriber sendError:errorObject]; [subscriber sendCompleted]; return [RACDisposable disposableWithBlock:^{ }]; }];
-
Cocoa桥接
RACSignal *signal6 = [view rac_signalForSelector:@selector(setFrame:)]; RACSignal *signal7 = [view rac_signalForControlEvents:UIControlEventTouchUpInside]; RACSignal *signal8 = [view rac_willDeallocSignal]; RACSignal *signal9 = RACObserve(view, backgroundColor);
-
信号转换
RACSignal *signal10 = [signal1 map:^id _Nullable(NSString * _Nullable value) { return [value substringFromIndex:1]; }];
-
序列转换
RACSignal *signal11 = sequence.signal;
订阅一个信号的方式
-
订阅方法
[signal11 subscribeNext:^(id _Nullable x) { NSLog(@"next value is %@", x); } error:^(NSError * _Nullable error) { NSLog(@"ops! Get some error: %@", error); } completed:^{ NSLog(@"finish success"); }];
-
绑定
RAC(view,backgroundColor) = signal10;
-
Cocoa桥接
[view rac_liftSelector:@selector(convertPoint:toView:) withSignals:signal1,signal2, nil]; [view rac_liftSelector:@selector(convertPoint:toView:) withSignalsFromArray:@[signal1,signal2]]; [view rac_liftSelector:@selector(convertRect:toLayer:) withSignalOfArguments:signal5];
订阅过程
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext:@1];
[subscriber sendNext:@2];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"disposed");
}];
}];
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
NSLog(@"next value is %@", x);
} error:^(NSError * _Nullable error) {
NSLog(@"Ops! Get some error:%@", error);
} completed:^{
NSLog(@"It finished");
}];
[disposable dispose];
元祖-RACTuple
- RAC定义的一种数据类型
- NSArray的简化版
- 其他语言中的意义
- 使用
RACTuple *tuple = RACTuplePack(@1, @"second");
id first = tuple.first;
id second = tuple.second;
id last = tuple.last;
id index2 = tuple[1];//second
NSLog(@"%@", index2);
RACTupleUnpack(NSNumber *num, NSString *str) = tuple;
NSLog(@"num is %@", num); //num is 1
}
信号示例

信号定义&&信号订阅

单元信号图示

信号的变换和组合


单个信号的变换

对值操作
Map

MapReplace

ReduceEach(只用于元祖)

其他

对数量操作
Filter(减少数量)

ignore(减少数量)

take(减少数量)

skip(减少数量)

take&skip其他(减少数量)

混合操作(减少数量)

StartWith(增加数量)

Repeat(增加数量)

retry

副作用操作

数量操作-collect

数量操作-aggregate

数量操作-scan

aggregate && scan变种

时间操作-有用的信号

时间操作-Delay

时间操作-Throttle

时间操作-类似Throttle的方法

多个信号组合
- 受那个信号终止而终止?
- 错误传递
- 各个信号何时开始订阅?
concat

merge


组合操作--zip

组合操作-combineLatest

组合操作- Zip&CombineLatest

组合操作 - Sample

组合操作--TakeUntil

组合操作--TakeUntilReplacement
