YYModel解析数组数据

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

你可能感兴趣的:(YYModel解析数组数据)