首页 > 代码库 > [iOS基础控件 - 4.2] 字典转模型Model
[iOS基础控件 - 4.2] 字典转模型Model
A.使用字典加载数据的缺点
1.用户自行指定key,容易出错
2.存入、取出都需要key,容易混乱
B.模型 (MVC中的model)
1.字典与模型对比:
(1)字典:存储数据,通过字符串类型的key取值(容易写错,写错了key编译器不会报错)
(2)模型:存储数据,自定义属性存储数据,其实就类似JavaBean,本质是数据封装
2.实现
(1)定义模型类
1 @interface App : NSObject 2 3 /** 4 copy : NSString 5 strong: 一般对象 6 weak: UI控件 7 assign: 基本数据类型 8 */ 9 10 /**11 名称12 */13 @property(nonatomic, copy) NSString *name;14 15 /**16 图标17 */18 @property(nonatomic, copy) NSString *icon;19 @end
(2)使用模型读取存储、读取数据
存储:
1 #pragma mark 取得应用列表 2 - (NSArray *) apps { 3 if (nil == _apps) { 4 // 1.获得plist的全路径 5 NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; 6 7 // 2.加载数据 8 NSArray *dictArray = [NSArray arrayWithContentsOfFile:path]; 9 10 // 3.将dictArray里面的所有字典转成模型,放到新数组中11 NSMutableArray *appArray = [NSMutableArray array];12 for (NSDictionary *dict in dictArray) {13 // 3.1创建模型对象14 App *app = [[App alloc] init];15 16 // 3.2 将字典的所有属性赋值给模型17 app.name = dict[NAME_KEY];18 app.icon = dict[ICON_KEY];19 20 // 3.3 添加到app数组中21 [appArray addObject:app];22 }23 24 _apps = appArray;25 }26 27 return _apps;28 }
读取:
1 iconView.image = [UIImage imageNamed:appData.icon];2 [appView addSubview:iconView];3 4 // 2.设置APP名字5 UILabel *nameLabel = [[UILabel alloc] init];6 nameLabel.text = appData.name;
C.Model改进
在ViewControl中解析、存储数据, 增加了数据、类的耦合性,控制器关心太多,在Model被修改之后难以进行自我修改.
解决 : ==> 所以在Model中解析数据
1.实现
(1)自定义带数据参数的构造方法
声明:
1 /**2 自定义构造方法3 通过字典来初始化模型对象4 */5 - (id) initWithDictionary:(NSDictionary *) dictionary;
实现:
1 - (id) initWithDictionary:(NSDictionary *) dictionary {2 if (self = [super init]) {3 self.name = dictionary[NAME_KEY];4 self.icon = dictionary[ICON_KEY];5 }6 7 return self;8 }
使用:
1 // 3.1创建模型对象2 App *app = [[App alloc] initWithDictionary:dict];3 4 // 3.2 添加到app数组中5 [appArray addObject:app];
(2)进一步提供类方法
1 + (id) appWithDictionary:(NSDictionary *) dictionary {2 // 使用self代表类名代替真实类名,防止子类调用出错3 return [[self alloc] initWithDictionary:dictionary];4 }
D.使用”instancetype”代替”id"
id: 代指所有类型,但是使用不恰当的类型指针指向不匹配的对象时,编译器不会报错、警告,但在运行时很可能会出错
instantcetype:编译器能够根据当前指向的对象,自动检查变量类型是否正确,进而发出警告
[iOS基础控件 - 4.2] 字典转模型Model
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。