美文网首页
YYModel解析数组数据

YYModel解析数组数据

作者: Zac波 | 来源:发表于2017-07-18 19:05 被阅读1598次

    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解析数组数据

          本文链接:https://www.haomeiwen.com/subject/yawhkxtx.html