2019独角兽企业重金招聘Python工程师标准>>>

刚刚学习了如何读取plist,将plist中的字典对象转成数组对象。字典和模型都可以存储数据,既然都可以存储对象,那么为什么要把plist中的字典转成模型呢?

字典 :通过字符串类型的key来取值。(一般情况下,设置数据和取出数据都使用"字符串类型的key",编写这些key时,编译器不会有任何友善提示,需要手动敲写字符串key,key容易写错,而且如果写错,编译器不会有任何警告和报错,容易造成设错数据或者取错数据)

模型 :用来存放数据的类, 继承自NSObject。(我感觉就像java中的javabean)所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示会更加专业。模型设置数据和取出数据都是通过它的属性,,属性名如果写错,编译器会马上报错,因此保证了数据的正确性。使用模型访问属性时, 编译器会提供一系列的提示,提高编码效率。

首先自定义一个模型类,属性和字典中的要对应

/** Shop.h */
#import <Foundation/Foundation.h>@interface Shop : NSObject/** 商品名称 */
@property(nonatomic, copy) NSString *name;/** 商品图片 */
@property(nonatomic, copy) NSString *icon;-(instancetype)initWithDict:(NSDictionary *)dict;+(instancetype)shopWithDict:(NSDictionary *)dict;@end
/** Shop.m */
#import "Shop.h"@implementation Shop
/** 用字典对象来初始化模型 */
-(id)initWithDict:(NSDictionary *)dict {if(self == [super init]) {self.name = dict[@"name"];self.icon = dict[@"icon"];}return self;
}+(id)shopWithDict:(NSDictionary *)dict {return [[self alloc]initWithDict:dict];
}@end

最后在ViewController中将字典转成模型

/** 所有商品数据 */
@property (strong, nonatomic)NSArray *shops;//这个方法是重写的getter方法,懒加载方式
- (NSArray *)shops {if(_shops == nil) {//加载plist数据NSBundle *bundle = [NSBundle mainBundle];NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];NSArray *dictArr = [NSArray arrayWithContentsOfFile:file];NSLog(@"%@", dictArr);//new一个可变数组存储模型对象NSMutableArray *shopArr = [NSMutableArray array];for (NSDictionary *dict in dictArr) {//调用Shop的类方法将字典转成模型Shop *shop = [Shop shopWithDict:dict];[shopArr addObject:shop];}//将模型数组赋值给_shops_shops = shopArr;}return _shops;
}

转载于:https://my.oschina.net/shenhuniurou/blog/626820

iOS开发之如何将字典转为模型相关推荐

  1. iOS开发JSON字符串和字典互转

    1.相关属性简述 NSJSONReadingOptions读取属性: typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) {NSJSONReadi ...

  2. iOS开发——NSArray中的字典排序

    手头上碰到一个项目,需要给数组中的字典中的一个字段排序,想了想,干脆再字典中增加一个字段,用来记录需要排序字段的第一个字符,用它来作为比较的对象,进行排序. - (void)viewDidLoad { ...

  3. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课 ...

  4. IOS第四天-新浪微博 -存储优化OAuth授权账号信息,下拉刷新,字典转模型

    *************application - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  5. iOS开发 --- 定位功能(系统框架CoreLocation)

    最近在做定位功能,只需要获取当前位置信息,包括经纬度.位置等,不需要持续获取. 对CoreLocation的封装.将定位相关的代码从 Controller 中分离,封装到 NSObject 对象中.采 ...

  6. iOS开发UI篇—字典转模型

    一.能完成功能的"问题代码" 1.从plist中加载的数据 2.实现的代码 1 // 2 // LFViewController.m 3 // 03-应用管理 4 // 5 // ...

  7. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇-使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: 1 //2 // YY ...

  8. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  9. IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等

    IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等 前言:人为规定的参数 每一个 小view视图 宽度 80 高度 90 数据类型 CGFloat 定义, 3 列,数据类型 ...

最新文章

  1. instantclient_11_2 连接oracle数据
  2. SQL Server如何查看存储过程的执行计划
  3. Python 数据分析与展示笔记4 -- Pandas 库基础
  4. oracle子查询为游标结果集,这个SQL怎么破?select后的爬树子查询(connect by)变换
  5. 如何应用AutoML加速图机器学习任务的处理?
  6. jdk8集合类流_JDK 8中的流驱动的集合功能
  7. C#设计模式之15-解释器模式
  8. 在linux中添加字体
  9. 孙子和外孙就是不一样吗?
  10. hdu 5144 NPY and shot(三分)
  11. django3与vue3本地搭建
  12. Windows解决net Framerwork 3.5无法安装的问题
  13. SPI通信协议_02
  14. VMware14详细安装带软件
  15. String转JSONObject,JSONObject转JSONArray,JSONArray数组转换成JSON字符串
  16. 图片如何转文字?三款良心软件,太好用了!
  17. 基于C#制作一个ChatGPT桌面助手
  18. C语言 第六章 多重循环
  19. HCNP RoutingSwitching之MAC地址防漂移
  20. freetype 使用解析---矢量字体

热门文章

  1. Linux系统编程----12(线程概念,Linux线程实现原理,栈中ebp指针和ebp指针,线程的优缺点和共享资源)
  2. C++子类对象隐藏了父类的同名成员函数(隐藏篇)
  3. socket 编程篇六之IPO多路复用-select poll epoll
  4. 计算机网络(一)计算机网络体系
  5. 【Linux系统编程学习】 动态库的制作与使用
  6. linux下查看系统socket读写缓冲区
  7. strtol,strtoll,strtoul, strtoull函数的使用
  8. 【C++ Priemr | 15】虚函数表剖析(二)
  9. WinPcap笔记(1):VisualStudio2015配置WinCap
  10. 网易严选Java开发三面面经:java读文件内容