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
- BaseModel
- BaseModel
- BaseModel
- baseModel
- BaseModel
- BaseModel
- BaseModel(数据模型映射关系)
- iOS 封装BaseModel
- mvc 封装 5 BaseModel
- iOS基类Model--BaseModel
- ios baseModel的封装方法
- (九)BaseModel的简单使用
- 基于ActiveAndroid框架的BaseModel
- odoo(openerp) - BaseModel的create_instance方法
- ThinkPHP 框架下 BaseModel 类整理
- iOS开发BaseModel的创建和使用(基类)
- iOS开发技巧系列---打造强大的BaseModel
- iOS开发技巧系列---打造强大的BaseModel
- 2015,那些用在智能家居里的技术
- Apache 学习笔记
- 2015高教社杯全国大学生数学建模竞赛题目
- 通过C#代码实现空间离散点的克里金(kriging)插值(二) 代码实现
- Python爬虫——爬取网页中的图片小试牛刀
- BaseModel
- 秒杀多线程第七篇 经典线程同步 互斥量Mutex
- SDL2.0学习笔记——事件处理
- JavaScript的那些坑之变量提升
- 【南理oj】14 - 会场安排问题(贪心算法)
- 剑指offer-二维数组查找
- ps主界面
- 对于单向链表的10几种常用算法
- MySQL connector/C++的用法