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
}
信号示例
信号示例.png
信号定义&&信号订阅
信号订阅与定义.png
单元信号图示
单元信号.png
信号的变换和组合
信号的变换.png
信号的组合.png
单个信号的变换
单个信号的变换.png
对值操作
Map
map.png
MapReplace
map_replace.png
ReduceEach(只用于元祖)
reduce_each.png
其他
其他.png
对数量操作
Filter(减少数量)
filter.png
ignore(减少数量)
ignore.png
take(减少数量)
take.png
skip(减少数量)
skip.png
take&skip其他(减少数量)
take_skip.png
混合操作(减少数量)
混合操作.png
StartWith(增加数量)
start_with.png
Repeat(增加数量)
repeat.png
retry
retry.png
副作用操作
副作用操作.png
数量操作-collect
collect.png
数量操作-aggregate
aggregate.png
数量操作-scan
scan.png
aggregate && scan变种
agg_scan.png
时间操作-有用的信号
time_signal.png
时间操作-Delay
delay.png
时间操作-Throttle
throttle.png
时间操作-类似Throttle的方法
buffer.png
多个信号组合
- 受那个信号终止而终止?
- 错误传递
- 各个信号何时开始订阅?
concat
concat.png
merge
merge.png
merger运用.png
组合操作--zip
zip.png
组合操作-combineLatest
combine_latest.png
组合操作- Zip&CombineLatest
zip_combinelatest.png
组合操作 - Sample
sample.png
组合操作--TakeUntil
take_until.png
组合操作--TakeUntilReplacement
take_until_replace.png