YYModel解析数组数据
YYModel一直是我多个项目里转换model的不二选择,如果产品在设计初期就和后端统一好属性格式,后期就基本不需要添加什么代码。不过在遇到返回的数据直接就是一个model数组的情况下(比如返回了10个User Model),YYModel并没有现成的内部实现方法,需要我们自己遍历一遍数组,或者创建一个Models数组类,但都太麻烦。于是自己写了一个很简单的工具类,就一个方法。
+ (NSArray *)jsonsToModelsWithJsons:(NSArray *)jsons {
NSMutableArray *models = [NSMutableArray array];
for (NSDictionary *json in jsons) {
id model = [[self class] yy_modelWithJSON:json];
if (model) {
[models addObject:model];
}
}
return models;
}
原理也很简单,就是把数组里面的字典一个个拿出来,然后用YYModel解析,就和你在拿到这些数组数据后所做的一模一样,只不过这次遍历代码只需写一次就行。
有个问题是我们该如何得知要转换的Model是哪一个,是以参数的形式传进来吗?当然可以这么做,不过我们可以用另外一种方式让我们的调用更方便。就像YYModel一样,直接用Model的类调用类方法,比如说这样:
NSArray *gifts = [GiftModel jsonsToModelsWithJsons:responseObject];
要做到这种不为每个类单独写方法,就给每个类添加方法,聪明的你一定想到了,就是为这些类的父类写一个Category。而YYModel的Model父类都是NSObject,很显然我们只要给NSObject写一个Category就OK了。
@interface NSObject (DBModelTool)
+ (NSArray *)jsonsToModelsWithJsons:(NSArray *)jsons;
@end
@implementation NSObject (DBModelTool)
+ (NSArray *)jsonsToModelsWithJsons:(NSArray *)jsons {
NSMutableArray *models = [NSMutableArray array];
for (NSDictionary *json in jsons) {
id model = [[self class] yy_modelWithJSON:json];
if (model) {
[models addObject:model];
}
}
return models;
}
@end