iOS-字典转模型(单模型)的实现
2015-10-28 22:02
459 查看
用模型取代字典的好处
使用字典的坏处
一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲,
eg:dict[@"name"] =@"Jack";
NSString*name = dict[@"name"];
而手敲字符串key,key容易写错,并且Key如果写错了,编译器也不会有任何警告和报错,造成设错数据或者取错数据。
使用模型的好处
所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业。
模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性。
使用模型访问属性时,编译器会提供一系列的提示,提高编码效率。
而且使用模型,使得MVC的编程思想也能有很好的体现。
举例说明:
将入下结构的plist文件数据转为模型:
MyModel.h头文件定义
2.除此以外,需要给外部提供相关的方法,方法最好同时提供对象方法和类方法。
/************************************************************************************/
使用字典的坏处
一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲,
eg:dict[@"name"] =@"Jack";
NSString*name = dict[@"name"];
而手敲字符串key,key容易写错,并且Key如果写错了,编译器也不会有任何警告和报错,造成设错数据或者取错数据。
使用模型的好处
所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业。
模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性。
使用模型访问属性时,编译器会提供一系列的提示,提高编码效率。
而且使用模型,使得MVC的编程思想也能有很好的体现。
举例说明:
将入下结构的plist文件数据转为模型:
MyModel.h头文件定义
// MyModel.h // AppManage // // Created by IMAC on 15/10/19. // Copyright © 2015年 ysc. All rights reserved. // #import <Foundation/Foundation.h> @interface MyModel : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *icon; -(instancetype)initWith:(NSDictionary* )dict; +(instancetype)initWith:(NSDictionary* )dict; @end
yModel.h注意事项:
1.在plist文件中结构为@[@{}]这种形式,且Dictionary中有两组数据,所以在头文件中需要定义两个数行,并写属性的类型必须和plist中的key类型对应,属性的名称必须和value中保持一致。
2.除此以外,需要给外部提供相关的方法,方法最好同时提供对象方法和类方法。
MyModel.h文件实现 MyModel.m
</pre><pre name="code" class="objc" style="background-color: rgb(240, 240, 240);">@implementation MyModel -(instancetype)initWith:(NSDictionary* )dict { if (self = [super init]) { // 使用 kvc 进行设置 减少代码 [self setValuesForKeysWithDictionary:dict]; //_name = dict[@"name"]; //_icon = dict[@"icon"]; } return self; } +(instancetype)initWith:(NSDictionary* )dict { return [[MyModel alloc] initWith:dict]; } @end
/************************************************************************************/
MyModel.m注意事项:
在对属性赋值时,建议采用kvc方式赋值,这样能够在属性较多时大大减少代码量。
ViewController.m 文件
</pre><pre name="code" class="objc" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(240, 240, 240);">
#import "ViewController.h"
#import <QuartzCore/QuartzCore.h> #import "MyModel.h" #import "MyView.h" #define COLUMN 3 #define yellowViewWidth 80 #define yellowViewHight 95 @interface ViewController () @property (strong, nonatomic) NSMutableArray *arrayDate; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self setUI]; } -(NSMutableArray*)arrayDate { if (nil == _arrayDate) { _arrayDate = [NSMutableArray array]; NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]; NSArray *tempArray = [[NSArray alloc] initWithContentsOfFile:path]; for (NSDictionary *dict in tempArray) { MyModel *model = [MyModel initWith:dict]; [_arrayDate addObject:model]; } } return _arrayDate; }
ViewController.m 文件的主意事项
我们给ViewController一个属性:@property (strong, nonatomic) NSMutableArray *arrayDate;
1.在转模型时,主要用到的方法就是
在使用该数组时,我们是这样赋值的:
MyModel *model = self.arrayDate[i];
所以为了方面使用,需要重写getter方法。
1)首先实例化可变数组 _arrayDate = [NSMutableArray array];
2)将数据plist文件读取到临时数组
3)使用for -in 将数据转化成model类型
4)再将数据添加到arrayDate存放的就是model类数据,该类包括两个属性(包含setter 和 getter方法),name 和 icon。
此操作后,即可使用model.name 和model.icon
</pre><pre name="code" class="objc">
完成效果图
</pre><pre name="code" class="objc">主要完成了从plist文件读取,自定义view,九宫格算法,imageView的圆角显示和下载的动画效果,模拟了应用管理</span>
码在:http://download.csdn.net/detail/yang198907/9221945
相关文章推荐
- iOS之MBProgressHUD用法总结
- 我的iOS学习历程 - OC第三天
- 我的iOS学习历程 - OC第三天
- IOS开发笔记21-ARC与分类
- IOS--导航栏
- IOS 控制系统音量
- IOS开发笔记20-OC内存管理
- iOS设计模式 - 访问者
- #在蓝懿学习iOS的日子#Day6
- 蓝懿iOS 技术内容和心得 10。28技术内容交流和心得分享
- iOS数据持久化的几种方式
- IOS开发笔记19-OC特有语法
- 零基础ios开发(五 深入理解继承—植物大战僵尸 )
- iOS开发 关于iBeacon的一些记录
- IOS开发笔记18-继承
- IOS开发笔记17-封装
- 【10/28】 iOS开发成长之路,【tableView】
- iOS 7大手势
- iOSCoreAnimation动画系列教程(二):CABasicAnimation
- ios开发系列之页面跳转