【iOS编程思想】ReactiveCocoa (3)解析集合

字典

一、使用rac_sequence.sinal,解析这个字典

//字典
NSDictionary * dict = @{@"account":@"aaa",
                        @"name":@"modi",
                        @"age":@18};

//转换成集合
[dict.rac_sequence.signal subscribeNext:^(id x) {
    
    //RACTupleUnpack 用来解析元组
    //宏里面的参数 传须要解析出来的变量名
    
    //= 右边 放须要解析的元组
    RACTupleUnpack(NSString * key,NSString * value) = x;
    
    NSLog(@"%@ = %@",key,value);
    
}];

解析打印:git

二、宏 RACTupleUnpack 的做用

它能够用来解析元组,宏里面的参数传须要解析出来的变量名,= 右边放须要解析的元组(x)。github

下面是文档中的示例:数组

数组

一、使用rac_sequence.sinal,解析这个数组

NSArray * arr = @[@"123",@"456",@1];

//链式
[arr.rac_sequence.signal subscribeNext:^(id x) {
    NSLog(@"%@",x);
}];

解析打印:atom

元组

NSArray * arr = @[@"123",@"456",@1];
//元组
RACTuple * tuple = [RACTuple tupleWithObjectsFromArray:arr];
NSString * str = tuple[0];
    
NSLog(@"%@",str);

解析打印:spa

一个实例:(解析plist文件)

plist结构图:

一、读取plist

//plist bundlePath
NSString * filePath = [[NSBundle mainBundle] pathForResource:@"flags.plist" ofType:nil];
//读取plist
NSArray * dictArr = [NSArray arrayWithContentsOfFile:filePath];
NSLog(@"读取到的数据 %@",dictArr);

读取到的数据,即字典数组:设计

二、设计数据模型Flag

2.一、给该数据模型一个解析方法:Dict -> Flag对象

@interface Flag : NSObject

@property (nonatomic, strong) NSString * name;

@property (nonatomic, strong) NSString * icon;

+ (instancetype)flagWithDict:(NSDictionary *)dict;

@end

2.二、解析方法实现:

+ (instancetype)flagWithDict:(NSDictionary *)dict{
    Flag * f = [[Flag alloc]init];
    [f setValuesForKeysWithDictionary:dict];
    return f;
}

三、解析数组

3.一、基本用法

//基本用法
NSMutableArray * arr = [NSMutableArray array];

[dictArr.rac_sequence.signal subscribeNext:^(id x) {
    //遍历元素
    Flag * flag = [Flag flagWithDict:x];
    [arr addObject:flag];
}];

NSLog(@"基本用法:%@",arr);

3.二、高级用法

该方法能够将集合中全部的元素映射成一个新的对象,即将plist文件中的字典数组转化为Flag对象的数组。code

//高级用法
//把集合中全部元素映射成一个新的对象
NSArray * arr = [[dictArr.rac_sequence map:^id(id value) {
    //集合中的元素
    //id 返回对象就是映射的值
    return [Flag flagWithDict:value];
}] array];

NSLog(@"高级用法:%@",arr);

解析结果打印:对象

就这样咱们很方便的就把字典数组转化为了对象数组。文档

github:get

https://github.com/ly918/Demos

相关文章
相关标签/搜索