[TOC]


RACSequence遍历数组

NSArray *array = @[@"1",@"2",@"3",@"4",@"5"];
[array.rac_sequence.signal  subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
输出
2018-01-09 15:13:46.177025+0800 PodTest[26525:4865191] 1
2018-01-09 15:13:46.177204+0800 PodTest[26525:4865191] 2
2018-01-09 15:13:46.177336+0800 PodTest[26525:4865191] 3
2018-01-09 15:13:46.177470+0800 PodTest[26525:4865191] 4
2018-01-09 15:13:46.177592+0800 PodTest[26525:4865191] 5
复制代码

RACSequence遍历字典

//遍历出来的键值对包装成了RACTuple(元组对象)
NSDictionary *dic = @{@"1" : @"one",@"2" : @"two",@"3" : @"three"};
[dic.rac_sequence.signal subscribeNext:^(id x) {
// 解包元组,会把元组的值,按顺序给参数里面的变量赋值
RACTupleUnpack(NSString *key, NSString *value) = x;
NSLog(@"key = %@; value = %@", key, value);
}];
输出
2018-01-09 15:34:00.706901+0800 PodTest[26836:4880078] key = 1; value = one
2018-01-09 15:34:00.707161+0800 PodTest[26836:4880078] key = 2; value = two
2018-01-09 15:34:00.707309+0800 PodTest[26836:4880078] key = 3; value = three
复制代码

flattenMap,Map

作用:用于把源信号内容映射成新的内容。

flattenMap
  • 作用:把源信号的内容映射成一个新的信号,信号可以是任意类型。
  • 传入一个blockblock类型是返回值RACStream,参数value
  • 参数value就是源信号的内容,拿到源信号的内容做处理
  • 包装成RACReturnSignal信号,返回出去。返回的必须是一个信号。
[[self.textField.rac_textSignal flattenMap:^RACStream *(id value) {
return [RACReturnSignal return:[NSString stringWithFormat:@"输出:%@",value]];
}] subscribeNext:^(id x) {

}];
复制代码
Map
  • 作用:把源信号的值映射成一个新的值
  • 传入一个block,类型是返回对象,参数是value
  • value就是源信号的内容,直接拿到源信号的内容做处理
  • 把处理好的内容,直接返回就好了,不用包装成信号,返回的值,就是映射的值。
[[self.textField.rac_textSignal map:^id(NSString * value) {
return @(value.length);
}] subscribeNext:^(id x) {
NSLog(@"---%@",x);
}];
复制代码
FlatternMap和Map的区别
  • FlatternMap中的Block返回信号。
  • Map中的Block返回对象
  • 开发中,如果信号发出的值不是信号,映射一般使用Map
  • 开发中,如果信号发出的值是信号,映射一般使用FlatternMap.
RACSubject *signals = [RACSubject subject];
RACSubject *signal = [RACSubject subject];
[[signals flattenMap:^RACStream *(id value) {
      //value不是信号 会崩溃
return value;
}] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
[signals sendNext:signal];
[signal sendNext:@"1221"];
复制代码

concat:组合

  • 作用:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id

GankRobot转载声明

原文出处:掘金iOS

原文作者:我是一个无情的代码杀手

原文地址:https://juejin.im/post/5d68e1baf265da03c50325b8