用模型取代字典的好处

使用字典的坏处

一般情况下,设置数据和取出数据都使用“字符串类型的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-字典转模型(单模型)的实现的更多相关文章

  1. IOS 字典快速转换为Model 模型

    一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取M ...

  2. IOS 字典模型互转框架 MJExtension

    IOS 字典模型互转框架 MJExtension   能做什么? MJExtension是一套字典和模型之间互相转换的超轻量级框架 MJExtension能完成的功能 字典(JSON) -->  ...

  3. iOS字典转模型MJExtension使用

    如果项目是纯OC的建议使用,MJExtension是一套字典和模型之间互相转换的超轻量级框架,可以轻松完成: 字典(JSON) --> 模型(Model) 模型(Model) --> 字典 ...

  4. Yii表单模型使用及以数组形式提交表单数据

    按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...

  5. KVC简介 -字典转模型,模型转字典

    // 下面两个方法.都属于 KVC 的方法 // KVC 是 cocoa 的大招.间接给对象属性设置数值 // 程序运行过程中,动态给对象属性设置数值.不关心 .h 中是怎样定义的 //      仅 ...

  6. Angular Reactive Form - 填充表单模型

    setValue 使用setValue,可以通过传递其属性与FormGroup后面的表单模型完全匹配的数据对象来一次分配每个表单控件值. 在分配任何表单控件值之前,setValue方法会彻底检查数据对 ...

  7. C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息

    系列目录     [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...

  8. ASP。NET Web表单模型,部分呈现和事件

    下载EventExample.zip - 41.33 KB 下载EventandAjaxExample.zip - 41.94 KB 介绍 通过参考ASP获得Web应用程序环境及其约束的概述.NET ...

  9. 新上线!3D单模型轻量化硬核升级,G级数据轻松拿捏!

    "3D模型体量过大.面数过多.传输展示困难",用户面对这样的3D数据,一定不由得皱起眉头.更便捷.快速处理三维数据,是每个3D用户对高效工作的向往. 在老子云最新上线的单模型轻量化 ...

  10. OSG-简单模型控制

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

随机推荐

  1. jquery监听input

    $(function(){ //输入框正在输入时 $("#ipt").on('input',function(){ if(!($('#ipt').val()=='')){ $(&q ...

  2. Vue+Vuex实现自动登录 升级版

    Vue+Vuex实现自动登录 升级版 之前实现的版本在这里:Vue+Vuex实现自动登录       在之前实现的版本中,如果你进行测试,可以看到在浏览器的local Storage中,确实里面有了我 ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查

    上一篇文章(https://www.cnblogs.com/meowv/p/12913676.html)我们用Code-First的方式创建了博客所需的实体类,生成了数据库表,完成了对EF Core的 ...

  4. MySQL 选错索引的原因?

    MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的.那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 ...

  5. element-ui的el-table和el-form嵌套使用表单校验

    表格中嵌套使用表单验证 表格是el-table自动获取的后台数据,每行都有el-input的验证,这样一个rules的规则就不能匹配到每一行,所以要是用动态的prop和rules规则 需求如下,要对告 ...

  6. 基于postman测试接口(整套接口测试)

    基于postman测试接口(整套接口测试) 可以解决的问题 几百个接口人工测试接口过于繁杂 大多测试无法使用请求结果当参数 可以使用随机参数 支持swagger信息导入 随账号持久化保存数据 对集合一 ...

  7. Mac 软件包管理器Homebrew使用指北

    Homebrew Homebrew由开发者 Max Howell 开发,并基于 BSD 开源,是一个非常方便的软件包包管理器工具. Homebrew 官网 Homebrew 的几个核心概念 在正式介绍 ...

  8. 电子邮件协议及GO发送QQ邮件

    目录 一.电子邮件的工作机制 1.1 SMTP 1.2 POP3 1.3 IMAP 二.邮件地址 三.MIME信息 四.使用golang发送qq邮件 一.电子邮件的工作机制 提供电子邮件服务的协议叫做 ...

  9. prometheus配置pushgateway功能测试

    一.环境: 1.prometheus服务器ip:192.168.0.208 2.node-exporter客户机ip:192.168.0.202 二.测试设计考虑: pushgateway类似一台信息 ...

  10. 循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用

    在我们开发BS页面的时候,往往需要了解常规界面组件的使用,小到最普通的单文本输入框.多文本框.下拉列表,以及按钮.图片展示.弹出对话框.表单处理.条码二维码等等,本篇随笔基于普通表格业务的展示录入的场 ...