RAC学习三-集合类RACTuple与RACSequence

本文介绍了ReactiveCocoa中的RAC集合类,包括RACTuple的用法,它类似NSArray但使用宏较多。接着讨论了RACSequence,它可以遍历数组和字典,通过订阅其signal实现异步遍历,但在使用时需注意时间顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RAC集合类
1、RACTuple

RACTuple的用法类似于OC里的数组用法,从源码来看像是NSArray的再封装,不过其宏使用比较多
RACTuple的简单用法

//RACTuple 元祖
RACTuple *tuple = [RACTuple tupleWithObjects:@"aa",@"bb",@"cc",nil];
NSLog(@"tuple:%@:tuple\n",tuple);

NSString *str = tuple[0];
NSLog(@"str:%@",str);

//打印内容
2018-05-30 16:52:39.456813+0800 RAC集合类[27128:963676] tuple:<RACTuple: 0x60000001f5b0> (
    aa,
    bb,
    cc
):tuple
2018-05-30 16:52:39.456961+0800 RAC集合类[27128:963676] str:aa
2、RACSequence
RACSequence对数组进行遍历

1.RAC对OC的数组和RACTuple元类进行分类的扩充,所以使用rac_sequence能够转换成RACSequence的对象
2.订阅RACSequence的signal,可遍历所有元素,但因其内部实现是异步执行的,所以使用时需要注意时间顺序。

//RAC集合
NSArray *arr = @[@"111",@"222",@"333"];    
RACSequence *sequence = [arr rac_sequence];
// 遍历
RACSignal *signal = [sequence signal];
// 订阅信号
[signal subscribeNext:^(id  _Nullable x) {
      NSLog(@"%@",x);
 }];

//打印内容
2018-05-30 17:10:31.968736+0800 RAC集合类[27389:980932] 111
2018-05-30 17:10:31.969152+0800 RAC集合类[27389:980932] 222
2018-05-30 17:10:31.969321+0800 RAC集合类[27389:980932] 333

RACSequence对字典进行遍历

NSDictionary *dict = @{@"name":@"Mr_zhang",@"age":@"19",@"level":@"3"};
    [dict.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
        //RACTupleUnpack:解析元祖
        //RACTupleUnpack宏的参数和字典的结构相对应
        RACTupleUnpack(NSString *key, NSString *value) = x;
        NSLog(@"%@:%@",key,value);
    }];

//打印内容
2018-05-30 17:16:06.739404+0800 RAC集合类[27539:986340] name:Mr_zhang
2018-05-30 17:16:06.739662+0800 RAC集合类[27539:986340] age:19
2018-05-30 17:16:06.740151+0800 RAC集合类[27539:986340] level:3

RACSequence将字典解析成模型

//用法1
NSArray *sources = @[@{@"name":@"Mr_zhang",@"age":@"24"},
                     @{@"name":@"Mr_Li",@"age":@"31"},
                     @{@"name":@"Mr_Wang",@"age":@"25"},
                     @{@"name":@"Mr_Lin",@"age":@"20"} ];
NSMutableArray *mutaArr = [[NSMutableArray alloc] init]; 
[sources.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
    [mutaArr addObject:[PersonModel parseWithDictionary:x]];
}];

//用法2
NSArray *arr = [[dictArr.rac_sequence map:^id _Nullable(NSDictionary *value) {
    //直接返回对象
    return [PersonModel parseWithDictionary:value];
}] array];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值