IOS中将字典转成模型对象
作为IOS开发初级者今天学习了 如何将plist数据字典转成 数据对象数组中 。有点像C#中解析xml数据 的过程。
apps.plist的xml数据是这样的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>天天酷跑</string>
<key>icon</key>
<string>icon_00</string>
</dict>
<dict>
<key>name</key>
<string>保卫萝卜2</string>
<key>icon</key>
<string>icon_10</string>
</dict>
<dict>
<key>name</key>
<string>神偷奶爸</string>
<key>icon</key>
<string>icon_11</string>
</dict>
</array>
</plist>
从处理plist中的数据 并返回模型对象的数组
/**
* 从处理plist中的数据 并返回模型对象的数组
*
* @return NSArray *apps; */
-(NSArray *) apps{
if (_apps==nil) {
// 过去plist的全路径
NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
//加载数组
NSArray *dicArray=[NSArray arrayWithContentsOfFile:path];
//将dicArray里面的所有字典转成模型对象,放到新的数组中。
NSMutableArray *appArray=[NSMutableArray array];
for (NSDictionary *dict in dicArray) {
//创建模型对象 /*
MyApp *app=[[MyApp alloc] initWithDict:dict]; [NSString stringWithFormat:<#(NSString *), ...#>];
[[NSString alloc] initWithFormat:<#(NSString *), ...#>]; [NSArray arrayWithContentsOfFile:<#(NSString *)#>]
[[NSArray alloc] initWithContentsOfFile:<#(NSString *)#>;
通过这里 我们需要提取一个appWith
一个命名规范的问题
*/ MyApp *app=[MyApp appWithDict:dict];
//添加到对象到数组中
[appArray addObject:app];
}
//赋值
_apps=dicArray; }
return _apps;
}
自定义的MyApp类,和字典中做到一一对应
#import <Foundation/Foundation.h>
/**
* copy :NSString
strong :一般对象
weak:UI控件
assign :基本数据类型
*/
@interface MyApp : NSObject
/**
* 图标
*/
@property (nonatomic,copy) NSString *icon;
/**
* 名称
*/
@property(nonatomic,copy) NSString *name;
/**
* 通过字典来初始化模型对象
*
* @param dic 字典对象
*
* @return 已经初始化完毕的模型对象
*/
/*
instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!
好处能够确定对象的类型,能够帮助编译器更好的为我们定位代码书写问题
instanchetype和id的对比
1、相同点
都可以作为方法的返回类型 2、不同点
①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象; ②instancetype只能作为返回值,不能像id那样作为参数,比如下面的写法:
*/
-(instancetype)initWithDict:(NSDictionary *)dict; +(instancetype) appWithDict:(NSDictionary *)dict;
@end
@implementation MyApp
-(instancetype)initWithDict:(NSDictionary *)dict{
if (self=[super init]) {
self.name=dict[@"name"];
self.icon=dict[@"icon"];
}
return self;
}
+(instancetype) appWithDict:(NSDictionary *)dict{ // 为何使用self,谁调用self方法 self就会指向谁!!
return [[self alloc] initWithDict:dict]; } @end
IOS中将字典转成模型对象的更多相关文章
- iOS-字典转双模型的实现过程中需要关注的细节
如果有以上结构的plist文件,那么应该怎么将其中的字典转换成模型? 显然一个模型已经无法搞定了,此时需要用到双数据模型(字典转模型). 我写了两种方式来实现模型的转换: 方法一 第一个模型:CarM ...
- 在iOS中将string转成UTF-8编码
在iOS开发中,特别是在对Web服务调用的时候,经常会遇到请求参数为中文的情况,那么这时候就需要将Url转成UTF-8编码才能进行请求.使用stringByAddingPercentEscapesUs ...
- ios中字典转模型的创建以及简单用法
// appModel.h // Created by zzqqrr on 17/8/19. // #import <Foundation/Foundation.h> @interface ...
- iOS开发—字典转模型,KVC设计模式
iOS开发UI基础—字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组 ...
- iOS swift HandyJSON组合Alamofire发起网络请求并转换成模型
在swift开发中,发起网络请求大部分开发者应该都是使用Alamofire发起的网络请求,至于请求完成后JSON解析这一块有很多解决方案,我们今天这里使用HandyJSON来解析请求返回的数据并转化成 ...
- html5中将图片的绝对路径转换成文件对象
html5中将图片的绝对路径转换成文件对象 将图片的绝对路径转换成base64编码,请看这篇文章 我们先来理解基本知识点: 1. 理解HTML5中的FileList对象与file对象. 在HTML5中 ...
- IOS开发学习笔记027-UITableView 使用模型对象
1.模型对象 2.单组数据的显示 1.模型对象 继续优化上一个程序 上一次用到字典,但是坏处多多.这里将这些数据封装到类中. 这就是MVC中得模型,模型就是数据的显示结构 新建一个类,添加几个属性和一 ...
- iOS 对模型对象进行归档
归档是指一种形式的序列化,专门编写用于保存数据的任何对象都应该支持归档.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们. 只要在类中实现的每个属性都是标量或者都是遵循NS ...
- iOS 字典自动生成模型
在实际开发中,我们经常需要根据字典来建模型.每次都打那么一串代码,想想也是挺恶心的.可以自己给NSDictionary写一个分类,进行属性生成. NSDictionary+Property.h #im ...
随机推荐
- MFC的窗口句柄
1.窗口.控件的指针和句柄的相互转化 1)指针转化为句柄在MFC应用程序中首先要获得窗口的指针,然后将其转化为句柄 CWnd* pWnd; HANDLE hWnd = pWnd->GetSafe ...
- Vue3.0 响应式数据原理:ES6 Proxy
Vue3.0 开始用 Proxy 代替 Object.defineProperty了,这篇文章结合实例教你如何使用Proxy 本篇文章同时收录[前端知识点]中,链接直达 阅读本文您将收获 JavaSc ...
- 深度分析:Java 静态方法/变量,非静态方法/变量的区别,今天一并帮你解决!
静态/非静态 方法/变量的写法 大家应该都明白静态方法/字段比普通方法/字段的写法要多一个static关键字,简单写下他们的写法吧,了解的可以直接略过 class Test{ // 静态变量 publ ...
- 【Flutter 实战】酷炫的开关动画效果
此动画效果是我在浏览文章时发现的一个非常酷炫的效果,于是就使用 Flutter 实现了. 更多动画效果及Flutter资源:https://github.com/781238222/flutter-d ...
- 编程C语言进阶篇——自定义数据类型:结构体
一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...
- 1.Cobaltstrike 安装与简介
1.Cobaltstrike 安装与简介 一.简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人内称为CS.自去年起, Cobaltstrike升级到3.0版本, ...
- 二、pandas学习
1.food.csv ========================================================================================= ...
- rest-framework 分页器
一 简单分页(查看第n页,每页显示n条) from rest_framework.pagination import PageNumberPagination # 一 基本使用:url=url=htt ...
- JDK(JDK8,JDK11)高速下载
JDK(JDK8,JDK11)高速下载 oracl 需要登陆才能下载,网速还贼慢. 华为云各版本高速下载通道:https://repo.huaweicloud.com/java/jdk/
- Mybatis报错invalid comparison: java.util.Date and java.lang.String
请求参数中两个属性确实都是date类型,数据库也确认是data类型,这个错误是因为 在这里把date类型的参数与单引号做了比较出现的,删除就可以正常运行了.