【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

相關文章
相關標籤/搜索