3.集合類
3.1 RACTuple——元組類,類似NSArray,用來包裝值.
RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:@[@"小紅",@"小明",@"小小",@"Gai爺"]];
NSString * str = tuple[0];
NSLog(@"%@",str);
運(yùn)行如圖
image
3.2 RACSequence——RAC中的集合類嚷节,用于代替NSArray,NSDictionary,可以使用它來快速遍歷數(shù)組和字典。
- ①遍歷數(shù)組
NSArray *array = @[@"小紅",@"小明",@"小小",@"Gai爺"];
[array.rac_sequence.signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
運(yùn)行如圖
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]);
}];
運(yùn)行如圖:
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);
}];
運(yùn)行如圖:
image
RACTupleUnpack
是不是和我的x[0],x[1]
一樣
- ③字典轉(zhuǎn)模型
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];
}];
我們首先要創(chuàng)建一個空數(shù)組摄咆,通過模型的一個類方法將我們接收到的數(shù)據(jù)轉(zhuǎn)成模型毅糟,再保存到數(shù)組中倔韭。
當(dāng)然還有更爽的方法拱层,集合的映射:它會將一個集合中的所有元素都映射成一個新的對象!
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);