字典转模型
2015-06-10 00:37
281 查看
将字典NSDictionary对象转为模型来使用,大大提高了程序的编写效率和扩展性,降低了程序发生错误的概率,其优缺点如下:
使用字典的坏处:
一般情况下,设置数据和去除数据都是用"字符串类型的key",编写这些key时,编译器不会有任何友善提示,需要手敲:
Key如果写错了,编译器不会有任何警告和报错,造成设错数据和取错数据
使用模型的好处
所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业
模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器马上会报错,因此,保证了数据的正确性.
使用模型访问属性时,编译器会提供一系列的提示,提高编码效率
其中,字典转模型的过程最好封装在模型内部
模型应该提供一个可以传入字典参数的构造方法
下图为字典转模型的过程:
相关代码如下:
/**
* appsArray的Get()方法
*
* @return 解析数据后的appsArray数组
*/
- (NSMutableArray *)appsArray {
if (nil == _appsArray) {
NSMutableArray *appArray = [[NSMutableArray alloc] init];
// 获取plist全路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
// 取出字典数组
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *dict in dictArray) {
App *app = [App appWithDict:dict];
[appArray addObject:app];
}
_appsArray = appArray;
}
return _appsArray;
}
使用字典的坏处:
一般情况下,设置数据和去除数据都是用"字符串类型的key",编写这些key时,编译器不会有任何友善提示,需要手敲:
dict[@"name"] = @"Jack"; NSString *name = dict[@"name"];</span>手敲字符串key, key容易写错
Key如果写错了,编译器不会有任何警告和报错,造成设错数据和取错数据
使用模型的好处
所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业
模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器马上会报错,因此,保证了数据的正确性.
使用模型访问属性时,编译器会提供一系列的提示,提高编码效率
app.name = @"Jack”; NSString *name = app.name;
其中,字典转模型的过程最好封装在模型内部
模型应该提供一个可以传入字典参数的构造方法
- (instancetype)initWithDict:(NSDictionary *)dict; + (instancetype)xxxWithDict:(NSDictionary *)dict;
下图为字典转模型的过程:
相关代码如下:
/**
* appsArray的Get()方法
*
* @return 解析数据后的appsArray数组
*/
- (NSMutableArray *)appsArray {
if (nil == _appsArray) {
NSMutableArray *appArray = [[NSMutableArray alloc] init];
// 获取plist全路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
// 取出字典数组
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *dict in dictArray) {
App *app = [App appWithDict:dict];
[appArray addObject:app];
}
_appsArray = appArray;
}
return _appsArray;
}
相关文章推荐
- Android 模拟器测试远程服务器成功,但是到真机上测试一点反应没有的解决办法
- UVa 11094 - Continents
- NOJ1119 仙林鼎山游乐园
- jquery源码之工具方法
- nginx 伪静态 rewrite
- ZXing CaptureActivity黑屏问题
- 我的CTF之旅(一)
- Github上的star和fork是什么
- backbone学习进阶二
- android屏幕适配
- NOJ1113 斐波那契数应用 模拟
- spring mvc 注解基本配置(@resource,@autowired,@Component...)
- MATLAB代码
- 【ios开发学习 - 第四课】UIButton使用
- head,tail,cat,more,less
- head,tail,cat,more,less
- [数据结构]前言——概述
- nginx那些强大的不可不说的功能
- hihocode第49周1001欧拉路一
- jquery判断checked的三种方法