获得信号的方式
-
单元信号
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