RACTuple
RACSequence
map:
flattenMap:
Model解析
RACSequence遍历数组
NSArray *array01 = @[@1,@2, @3, @4];
[array01.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
RACSequence遍历字典
// 遍历出来的键值对包装成了RACTuple(元组对象)
NSDictionary *dict01 = @{@”name”:@”dy”, @”age”: @28};
[dict01.rac_sequence.signal subscribeNext:^(id _Nullable x) {
// 解包元组,会把元组的值,按顺序给参数里面的变量赋值
RACTupleUnpack(NSString *key, NSString *value) = x;
NSLog(@”key = %@; value = %@”, key, value);
}];
map:
// 创建信号
RACSubject *subject = [RACSubject subject];
// 绑定信号
RACSignal *bindSignal = [subject map:^id _Nullable(id _Nullable value) {
// 获取的数据,value
// NSLog(@”–> %@”, value);
// 返回的类型,就是你需要映射的值
return [NSString stringWithFormat:@”key:%@”, value];
}];
// 订阅绑定信号
[bindSignal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
// 发送
[subject sendNext:@”321”];
[subject sendNext:@”555”];
[subject sendNext:@”999”];
flattenMap:
// 创建信号
RACSubject *signal = [RACSubject subject];
// 绑定信号
RACSignal bindSignal = [signal flattenMap:^__kindof RACSignal _Nullable(id _Nullable value) {
NSString *didValue = [NSString stringWithFormat:@”key:%@”, value];
return [RACReturnSignal return:didValue];
}];
// 订阅信号
[bindSignal subscribeNext:^(id _Nullable x) {
NSLog(@”订阅绑定数据:%@”, x);
}];
// 发送数据
[signal sendNext:@”value”];
Model解析:
NSMutableArray *arr = [NSMutableArray array];
NSString *path = [[NSBundle mainBundle] pathForResource:@”flag.plist” ofType:nil];
NSArray *valueArr = [NSArray arrayWithContentsOfFile:path];
// 第一种,先遍历出每个数据,将数据转换成model
[valueArr.rac_sequence.signal subscribeNext:^(NSDictionary * x) {
WDYFlag *flag = [WDYFlag flagWithDictionary:x];
[arr addObject:flag];
}];
// 第二种:高级用法,使用map直接转换为字典类型数据
NSArray result = [[valueArr.rac_sequence map:^id _Nullable(NSDictionary value) {
return [WDYFlag flagWithDictionary:value];
}] array];
数据类型:
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *icon;
+(instancetype)flagWithDictionary:(NSDictionary *)dict;
+(instancetype)flagWithDictionary:(NSDictionary *)dict{
WDYFlag *flag = [[self alloc] init];
[flag setValuesForKeysWithDictionary:dict];
return flag;
}