iOS 字典转模型
2016-11-22 12:57
162 查看
字典转模型
1.简单的字典转模型-(instancetype)initWithDict:(NSDictionary *)dict { if (self=[super init]) { self.name=dict[@"name"]; self.icon=dict[@"icon"]; //简单的字典转模型可以直接采用KVC来转 // [self setValuesForKeysWithDictionary:dict]; } return self; } +(instancetype)carsWithDict:(NSDictionary *)dict { return [[self alloc]initWithDict:dict]; }
2.字典中包含数组
2.1首先在头文件创建一个数组包含子模型
2.2在.m文件中将字典模型转为车模型后存放入车模型数组中
/*分组 */ @interface AZCarGroup : NSObject /*车模型数组 */ @property(nonatomic,strong)NSArray *cars; /*组名*/ @property(nonatomic,copy)NSString *title; -(instancetype)initWithDict:(NSDictionary *)dict; +(instancetype)carGroupWithDict:(NSDictionary *)dict;
-(instancetype)initWithDict:(NSDictionary *)dicts { if (self=[super init]) { self.title=dicts[@"title"]; //将字典数组中的字典转为车模型存放到头文件的数组中 NSMutableArray *cars=[NSMutableArray array]; for (NSDictionary *dict in dicts[@"cars"]) { AZCar *car=[AZCar carsWithDict:dict]; [cars addObject:car]; } self.cars=cars; } return self; } +(instancetype)carGroupWithDict:(NSDictionary *)dicts { return [[self alloc]initWithDict:dicts]; }
一般在使用我们的模型数据时采用懒加载方式加载
//所有车数据 -(NSArray *)carGroups { if (_carGroups==nil) { //加载plist数据 NSArray *dictArr=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"cars.plist" ofType:nil]]; //字典转模型 NSMutableArray *tempArray=[NSMutableArray array]; for (NSDictionary *dict in dictArr) { AZCarGroup *carGroup=[AZCarGroup carGroupWithDict:dict]; [tempArray addObject:carGroup]; } self.carGroups=tempArray; } return _carGroups; }
3.MJExtension框架的使用
首先导入框架
确定Cars里面装的AZCar模型
将模型装入数组
框架的使用简化了复杂机械的字典转模型操作
#import "MJExtension.h"
//所有车数据 -(NSArray *)carGroups { if (_carGroups==nil) { //通过返回的字典确定cars数组中所装的内容为AZCar模型 [AZCarGroup mj_setupObjectClassInArray:^NSDictionary *{ return @{@"cars":[AZCar class]}; }]; _carGroups=[AZCarGroup mj_objectArrayWithFilename:@"cars.plist"]; } return _carGroups; }
4.修改模型属性类型
[item setValue:@"中国" forKeyPath:@"name"]; setValue:forKeyPath实现原理 1.先查看有没有对应key值的set方法,如果有set方法,就会调用set方法,给对应的属性赋值 2.如果没有set方法,去查看有没有跟key值相同并且带有下划线的成员属性.如果有的话,就给带有下划线的成员属性赋值 3.如果没有跟key值相同并且带有下划线的成员属性,还会去找有没有跟key值相同名称的成员属性.如果有,就给它赋值. 4.如果没有直接报错. */
//setValuesForKeysWithDictionary实现原理 [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { [item setValue:obj forKeyPath:key]; NSLog(@"%@--%@",key,obj); }]; return item; } // 可以在set方法赋值前修改该属性类型(运行时) -(void)setIcon:(UIImage *)icon{ NSString *imageName = (NSString *)icon; _icon = [UIImage imageNamed:imageName]; } -(void)setIcon:(NSString *)icon{ // NSString *imageName = (NSString *)icon; _icon = [UIImage imageNamed:icon]; }
相关文章推荐
- iOS开发UI篇—字典转模型
- iOS_21团购_【运行时】将字典转成对象模型
- IOS中将字典转成模型对象
- IOS字典转模型
- 【iOS开发-48】九宫格布局案例:自动布局、字典转模型运用、id和instancetype区别、xib重复视图运用及与nib关系
- iOS开发之字典数据建立模型步骤
- ios 字典转模型
- ios字典转模型
- IOS 字典模型互转框架 MJExtension
- ios学习8_KVC和字典转模型
- IOS 字典快速转换为Model 模型
- iOS开发九宫格布局案例:自动布局、字典转模型运用、id和instancetype区别、xib重复视图运用及与nib关系
- [iOS基础控件 - 4.2] APP列表 字典转模型Model
- ios字典转模型
- iOS MJExtension框架之字典数组转模型数组
- iOS开发—字典转模型,KVC设计模式
- iOS开发UI篇—字典转模型
- IOS 字典快速转换为Model 模型
- ios开发- 利用运行时(runtime)字典转模型
- ios学习8_KVC和字典转模型