BaseModel

来源:互联网 发布:java程序代码及结果 编辑:程序博客网 时间:2024/05/22 00:52

使用时 直接在需要 model 数据的地方写上和数据名相对应的属性 就可以解析到 model 中了

#import <Foundation/Foundation.h>@interface BaseModel : NSObject// 初始化方法   传入解析的json数据- (id)initWithContentDic:(NSDictionary *)jsonDic;// 属性名的映射字典 @{jsonDic.key  :  model.attringbute}@property (nonatomic, copy)NSDictionary *mapDic;@end
#import "BaseModel.h"@implementation BaseModel- (id)initWithContentDic:(NSDictionary *)jsonDic {    if (self  = [super init]) {        [self setAttributesWithDic:jsonDic];    }    return self;}- (void)setAttributesWithDic:(NSDictionary *)jsonDic {#pragma mark--- 普通字符的赋值    //1. 将jsonDic中的所有的key值  转换成set方法    for (NSString *key in [jsonDic allKeys]) {        // 对key之进行操作  --> setKey:        NSString *bigan = [[key substringToIndex:1] uppercaseString];// 获取key值的首字母并大写        NSString *end = [key substringFromIndex:1]; // 获取key值除首字母外的其他字符        // 获取最后的set方法名        NSString *mothodString = [NSString stringWithFormat:@"set%@%@:",bigan,end];        // 将方法名转换成set方法       SEL mothod = NSSelectorFromString(mothodString);        // 2. 判断model类是否相应set方法,如果是的话 调用set方法并赋值        if ([self respondsToSelector:mothod]) {            // 获取需要保存的数据            id value = [jsonDic objectForKey:key];            //  确定value不为空            if (![value isKindOfClass:[NSNull class]]) {                // 调用set方法并赋值                [self performSelector:mothod withObject:value];            }        }    }#pragma mark--- 特殊字符的赋值    for (NSString *key in self.mapDic) {        // 获取model对象中的特殊字符的属性名        NSString *attribute = [self.mapDic objectForKey:key];        // 对key之进行操作  --> setKey:        NSString *bigan = [[attribute substringToIndex:1] uppercaseString];// 获取key值的首字母并大写        NSString *end = [attribute substringFromIndex:1]; // 获取key值除首字母外的其他字符        // 获取最后的set方法名        NSString *mothodString = [NSString stringWithFormat:@"set%@%@:",bigan,end];        // 将方法名转换成set方法        SEL mothod = NSSelectorFromString(mothodString);        // 2. 判断model类是否相应set方法,如果是的话 调用set方法并赋值        if ([self respondsToSelector:mothod]) {            // 获取需要保存的数据            id value = [jsonDic objectForKey:key];            //  确定value不为空            if (![value isKindOfClass:[NSNull class]]) {                // 调用set方法并赋值                [self performSelector:mothod withObject:value];            }        }    }}@end

补充:使用 GCD创建一个 BaseModel 提高效率

    dispatch_apply([jsonDic allKeys].count, dispatch_get_global_queue(0, 0), ^(size_t index) {        NSLog(@"%@dddddddddddddddddddd",[NSThread currentThread]);        NSString *key=[jsonDic allKeys][index];        // 对key之进行操作  --> setKey:        NSString *bigan = [[key substringToIndex:1] uppercaseString];// 获取key值的首字母并大写        NSString *end = [key substringFromIndex:1]; // 获取key值除首字母外的其他字符        // 获取最后的set方法名        NSString *mothodString = [NSString stringWithFormat:@"set%@%@:",bigan,end];        // 将方法名转换成set方法        SEL mothod = NSSelectorFromString(mothodString);        // 2. 判断model类是否相应set方法,如果是的话 调用set方法并赋值        if ([self respondsToSelector:mothod]) {            // 获取需要保存的数据            id value = [jsonDic objectForKey:key];            //  确定value不为空            if (![value isKindOfClass:[NSNull class]]) {                // 调用set方法并赋值                [self performSelector:mothod withObject:value];            }        }    });
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高铁不能送老人怎么办 小孩买火车票没有身份证怎么办 断奶后孩子瘦了怎么办 两岁宝宝坐飞机哭闹怎么办 八个月宝宝坐飞机哭闹怎么办 六岁儿童发烧39度怎么办 孩子坐飞机没带证件怎么办 带孩子坐飞机需要什么证件怎么办 婴儿乘飞机没带证件怎么办 吃了轮状发烧怎么办 儿童票比打折票贵怎么办 订机票订错了怎么办 如果飞机不支持婴儿票怎么办 报志愿登不上去怎么办 微单自拍是反的怎么办 蜡笔弄到桌子上怎么办 油画颜料干透了怎么办 数字油画颜料干了怎么办 数字油画的颜料干了怎么办 丙烯颜料画错了怎么办 油画的油干了怎么办 数字油画没画完颜料干了怎么办? 涂完口红很干怎么办 吃鸡匹配不到人怎么办 电脑吃鸡更新慢怎么办 苹果手机吃鸡更新不了怎么办 吃鸡更新硬盘不够怎么办 吃鸡链接不到更新服务器怎么办 6s吃鸡更新不了怎么办 凌美钢笔刮纸怎么办 毕加索钢笔不出水怎么办妙招 打印机总显示墨水已用完怎么办 樱花勾线笔干了怎么办 枣核卡在喉咙里怎么办 马桶被玉米棒堵了怎么办 雪糕棒掉马桶里了怎么办 食用色素吃多了怎么办 蜡笔弄到指甲里怎么办 小孩把彩笔吃了怎么办 宝宝吃了水彩笔怎么办 宝宝不小心吃了蜡笔怎么办