RAC_3.集合類

3.集合類

3.1 RACTuple——元組類,類似NSArray,用來包裝值.

RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:@[@"小紅",@"小明",@"小小",@"Gai爺"]];
    NSString * str = tuple[0];
    NSLog(@"%@",str);

運行如圖


image

3.2 RACSequence——RAC中的集合類,用于代替NSArray,NSDictionary,可以使用它來快速遍歷數組和字典。

  • ①遍歷數組
    NSArray *array = @[@"小紅",@"小明",@"小小",@"Gai爺"];
    [array.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"%@",x);
    }];

運行如圖


image
  • ②遍歷字典

簡單模式

    NSDictionary *dict = @{
                           @"1":@"小明",
                           @"2":@"小紅",
                           @"3":@"笑笑",
                           @"4":@"gai爺"
                           };
    [dict.rac_keySequence.signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"rac_keySequence ==%@",x);
    }];
    
    [dict.rac_sequence.signal subscribeNext:^(RACTwoTuple * x) {
        NSLog(@"rac_sequence == %@ ++ %@",x[0],x[1]);
    }];

運行如圖:


image

添加宏RACTupleUnpack

                           @"1":@"小明",
                           @"2":@"小紅",
                           @"3":@"笑笑",
                           @"4":@"gai爺"
                           };
//    [dict.rac_keySequence.signal subscribeNext:^(id  _Nullable x) {
//        NSLog(@"rac_keySequence ==%@",x);
//    }];
    
    [dict.rac_sequence.signal subscribeNext:^(RACTwoTuple * x) {
        NSLog(@"rac_sequence == %@ ++ %@",x[0],x[1]);
        RACTupleUnpack(NSString * key,NSString * value) = x;
        NSLog(@"%@ : %@",key,value);
    }];

運行如圖:


image

RACTupleUnpack是不是和我的x[0],x[1]一樣

  • ③字典轉模型

KFC.h

#import <Foundation/Foundation.h>

@interface KFC : NSObject
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *icon;

+ (instancetype)kfcWithDict:(NSDictionary *)dict;
@end

KFC.m

#import "KFC.h"

@implementation KFC

+ (instancetype)kfcWithDict:(NSDictionary *)dict {
    KFC *kfc  = [[KFC alloc]init];
    [kfc setValuesForKeysWithDictionary:dict];
    return kfc;
}

@end

SetViewController.m

    NSString *pathStr = [[NSBundle mainBundle]pathForResource:@"kfc.plist" ofType:nil];
    NSArray *array = [NSArray arrayWithContentsOfFile:pathStr];
    
    NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:array.count];
    
    [array.rac_sequence.signal subscribeNext:^(NSDictionary * x) {
        KFC *kfc = [KFC kfcWithDict:x];
        NSLog(@"%@",kfc);
        [arrayM addObject:kfc];
    }];

我們首先要創建一個空數組,通過模型的一個類方法將我們接收到的數據轉成模型,再保存到數組中。
當然還有更爽的方法,集合的映射:它會將一個集合中的所有元素都映射成一個新的對象!

    NSString *pathStr = [[NSBundle mainBundle]pathForResource:@"kfc.plist" ofType:nil];
    NSArray *array = [NSArray arrayWithContentsOfFile:pathStr];
    
    //會將一個集合中的所有元素都映射成一個新的對象!
    NSArray * arr = [[array.rac_sequence map:^id _Nullable(NSDictionary * value) {
        //返回模型!!
        return  [KFC kfcWithDict:value];
    }] array];
    NSLog(@"%@",arr);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容