iOS-字典转模型(单模型)的实现
用模型取代字典的好处
使用字典的坏处
一般情况下,设置数据和取出数据都使用“字符串类型的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-字典转模型(单模型)的实现的更多相关文章
- IOS 字典快速转换为Model 模型
一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取M ...
- IOS 字典模型互转框架 MJExtension
IOS 字典模型互转框架 MJExtension 能做什么? MJExtension是一套字典和模型之间互相转换的超轻量级框架 MJExtension能完成的功能 字典(JSON) --> ...
- iOS字典转模型MJExtension使用
如果项目是纯OC的建议使用,MJExtension是一套字典和模型之间互相转换的超轻量级框架,可以轻松完成: 字典(JSON) --> 模型(Model) 模型(Model) --> 字典 ...
- Yii表单模型使用及以数组形式提交表单数据
按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...
- KVC简介 -字典转模型,模型转字典
// 下面两个方法.都属于 KVC 的方法 // KVC 是 cocoa 的大招.间接给对象属性设置数值 // 程序运行过程中,动态给对象属性设置数值.不关心 .h 中是怎样定义的 // 仅 ...
- Angular Reactive Form - 填充表单模型
setValue 使用setValue,可以通过传递其属性与FormGroup后面的表单模型完全匹配的数据对象来一次分配每个表单控件值. 在分配任何表单控件值之前,setValue方法会彻底检查数据对 ...
- C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息
系列目录 [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...
- ASP。NET Web表单模型,部分呈现和事件
下载EventExample.zip - 41.33 KB 下载EventandAjaxExample.zip - 41.94 KB 介绍 通过参考ASP获得Web应用程序环境及其约束的概述.NET ...
- 新上线!3D单模型轻量化硬核升级,G级数据轻松拿捏!
"3D模型体量过大.面数过多.传输展示困难",用户面对这样的3D数据,一定不由得皱起眉头.更便捷.快速处理三维数据,是每个3D用户对高效工作的向往. 在老子云最新上线的单模型轻量化 ...
- OSG-简单模型控制
本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...
随机推荐
- 在终端输入npm run serve时出现npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! test_vue_0613@1.0.0 dev: 错误的解决方法
在vscode终端使用命令 npm run serve 的时候报错 错误原因在于由于文件 node_modules 太大,在项目上传时有些人会删掉 导致我们下载的项目中缺少这个文件 在尝试把自己项目的 ...
- jenkins 流水线学习
最佳实践: https://www.cnblogs.com/itech/p/5678643.html 一些样例 https://jenkins.io/doc/pipeline/examples/ gi ...
- Jenkins 实现 ldap认证
使用自己搭建的openldap: 使用Test LdapSetting测试的结果: 所测试的用户在:svn,jenkins,gitlab,sonarqube,wpsadmin组下 若用户不在jenki ...
- 朴实的聊聊很多人会误解/不懂的Java并发中断机制
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...
- Java集合类: Set、List、Map
Set.List.Map都是集合接口 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构,健值必须具有唯一 ...
- MySQL表的CRUD及多表查询
数据库表的增删改查操作: 增.删.改 查: 单表查询 简单查询.where约束.group by分组.聚合查询.having过滤.order by排序.limit限制.正则匹配 多表查询 连表查询:交 ...
- Spring 自动装配 byName
自动装配 byName,这种模式由属性名称(方法名)指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName.然后,它尝试 ...
- ShoneSharp语言(S#)软件更新13.7版
ShoneSharp语言(S#)编辑解析运行器 软件更新13.7版 作者:Shone 近期在写博客过程中对S#进行增强,把语法规则更新到2.0版,并同步更新软件到ShoneSharp.13.7.exe ...
- SVN强制添加备注
1.进入仓库project1/hooks目录,找到pre-commit.tmpl文件 cp pre-commit.tmpl pre-commit 2.编辑pre-commit文件, 将: $SVNLO ...
- Function's dict
众所周知,Python是没有switch的,那么只能使用 if else来进行判断,但是if else比较冗长, 使用太多的if else 代码看起来不简洁,如下 student.py def stu ...