文档章节

iOS开发之如何将字典转为模型

shenhuniurou
 shenhuniurou
发布于 2016/03/01 21:34
字数 527
阅读 37
收藏 0

        刚刚学习了如何读取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;
}


© 著作权归作者所有

共有 人打赏支持
shenhuniurou
粉丝 19
博文 78
码字总数 63826
作品 0
广州
Android工程师
私信 提问
面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课
04/26
0
0
iOS开发者必备:九大设计类工具

“工欲善其事,必先利其器”,对于iOS开发者和设计师来说,若在开发和设计的过程中有“利器”在手,那或许将会起到事半功倍的效果。现在,就让我们盘点下,当下最为流行和实用的iOS设计类开发...

沉淀岁月
2013/09/12
269
0
手把手教你使用MJExtension(简单使用)

一、MJExtension第三方框架 我们在iOS开发过程中,我们常常需要将字典数据(也就是JSON数据)与Model模型之间的转化,例如网络请求返回的微博数据、等等,如果我们自己全部手动去创建模型并赋值...

贝勒老爷
08/15
0
0
开发一个简单的 iOS 5 应用(一、二、三)

本教程将通过创建一个简单的应用快速带你进入 iOS 应用开发中,涉及的内容包括: iPhone 开发者入门 如何使用模型对象在您的应用中存储数据 如何使用 Table Views – 包括添加与删除行 如果为...

oschina
2013/04/15
4.5K
6
苹果 iOS 6 正式发布 200项升级功能更完善

[天极北京6月12日凌晨消息]北京时间2012年6月12日凌晨1点,2012年苹果全球开发者大会如期而至,苹果公司于本届大会首日召开的发布会无疑颇具看点。在本场发布会中,继新一代苹果Macbook Pro...

oschina
2012/06/12
2.4K
5

没有更多内容

加载失败,请刷新页面

加载更多

MySQL 主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

野雪球
9分钟前
0
0
OSChina 周一乱弹 —— 温柔的人应该这样

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《フィクション-sumika》 《フィクション-sumika》 手机党少年们想听歌,请使劲儿戳(这里) 假期时间干嘛去, @for...

小小编辑
58分钟前
76
6
[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
6
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
29
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部