字典转模型
- 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;
}