什么是字典转模型,在plist文件中字典本身就可以存储数据,那我们模型其实也是用来存储数据的,那么什么是模型,就比如说我们可以创建一个类,给这些类添加属性,这些属性应该和字典中的键一一对应,然后创建一个对象,把字典中的键对应的值传给它,然后用来存储数据。其实就是本来用字典来保存的数据来用类的对象来保存.这样做的好处是什么,就是如果你在数据的时候字典中的键写错了,编译器不会报错,而模型对象一旦你写错了会报错的。写代码也会有提示了,使用模型之后后面可以使用我们面向对象的特征来进行扩展,让程序变得更灵活。
字典转模型我们需要
1、创建一个模型类,
2、在懒加载数据的时候,把加载到的数据放到模型对象中,再把模型对象放到数组中。
我们最好在模型类中写这两个方法这样我们在使用模型的时候就可以不用通过字典的键来一个个访问了。
-(instancetype)initWithDict:(NSDictionary *)dict
{
if(self=[super init])
{
self.name=dict[@"name"];
self.icon=dict[@"icon"];
}
return self;
}
+(instancetype)appWithDict:(NSDictionary *)dict
{
return [[self alloc]initWithDict:dict];
}
模型中必备的就是属性和两个方法,一个是对象方法一个是类方法。这两个方法最好都别用返回值为id,因为如果返回的id类型的话,可以用任何类型来接受,这样就可能会出现错误,万一你用另外的类型来接受了,就可以调用那个类型的方法,但是一运行就会报错。用instancetype在哪个类里面就代表哪个类的类型。这样如果你用其他类型来接受这个方法返回的类型就会有一个警告。最好也不用类本身的具体的类型,因为万一你要继承你的模型类,这样你创建子类就只能返回父类对象,然后只能调用父类的属性和方法。
字典转模型大概是这样子的
-(NSArray *)array
{
if(_array==nil)
{
NSString * path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
NSArray *dicArray =[NSArray arrayWithContentsOfFile:path];//数组中保存字典类型
//创建可变数组来保存模型对象
NSMutableArray *arrayModels=[NSMutableArray array];//空的可变数组
//把字典对象转换成模型
for(NSDictionary *dict in dicArray)
{
ZXApp *model=[ZXApp appWithDict:dict];//创建模型
[arrayModels addObject:model];//模型加入到这个数组中
}
_array=arrayModels;
}
return _array;
}