Foundation框架(5)字典转模型

  • 字典对象与模型对象的转换

从本地或者网络获取的数据,往往都是字典类型的。

这些字典数据往往字段固定,且以数组的形式存储。

使用字典可能会带来一些不利:

1. key不方便记忆且编译器不进行正确性的验证

2. 不能进行一些对象的操作

解决的方法是:

将固定字段的字典,封装成自定义的对象,这种对象我们称之为“模型”。

  • 字典转模型的步骤

1)创建模型类

属性名应为对应词典中的key字符串中的名字

属性类型应为词典中对应value的类型。

如:字典来自plist文件

@interface AMMusicModel : NSObject

@property (nonatomic) NSString * song;
@property (nonatomic) NSString * singer;

@end

2)添加init及类方法创建模型类

@interface AMMusicModel : NSObject
@property (nonatomic) NSString * song;
@property (nonatomic) NSString * singer;
- (instancetype)initWithDictionary:(NSDictionary*) dict;
+ (instancetype)modelWithDictionary:(NSDictionary*) dict;
@end

3)将字典转成模型对象,用属性存储

- (instancetype)initWithDictionary:(NSDictionary *)dict
{
    if ( self = [super init] ) {
        self.song = dict[@"dict"];
        self.singer = dict[@"singer"];
    }
    return self;
}
+ (instancetype)modelWithDictionary:(NSDictionary*) dict
{
    return [[self alloc] initWithDictionary:dict];
}

4)在持有模型对象的类中添加属性,往往是数组

@interface AMMusicListModel : NSObject
@property (nonatomic) NSMutableArray * musicArray;
@end

并在适合的位置,创建该数组:

NSString *path = @".../music.plist";
NSArray * plistArray = [NSArray arrayWithContentsOfFile:path];
self->_musicArray = [NSMutableArray array];
for ( NSDictionary * dict in plistArray) {
    AMMusicModel * model = [AMMusictModel modelWithDictionary:dict);
    [self->_musicArray addObject:model];
}
  • 懒加载

是一种延迟加载方式,在需要的时候才加载

是一种内存调优的手段,能够在一定程度上减少不必要内存的使用

具体做法:重写属性的getter方法

- (NSMutableArray*) musicArray {
    if ( _musicArray == nil ) {
        NSString *path = @".../music.plist";
        NSArray * plistArray = [NSArray arrayWithContentsOfFile:path];
        self->_musicArray = [NSMutableArray array];
        for ( NSDictionary * dict in plistArray) {
            AMMusicModel * model = [AMMusictModel modelWithDictionary:dict);
            [self->_musicArray addObject:model];
        }
    }
    return _musicArray;
}
  • KVC

Key Value Coding,键值编码协议NSKeyValueCoding,提供一种机制来间接访问对象的属性。

获得值:

- (id)valueForKey:(NSString *)key

设置值:

- (void)setValue:(id)value forKey:(NSString *)key

路径访问方式:

存在复合关系时,通过 . 将属性名连接成路径访问

如下图,对象employee1中 包含属性manager ,而manager中包含其他属性

可以通过路径字符串 @”manager.employee1”访问

- (id)valueForKeyPath:(NSString *)keyPath
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath

意义:

1)提供了对象属性的另一种有效的访问方式

2)为KVO提供了实现基础

...

  • 模型转字典

模型对象使用NSKeyValueCoding协议中的方法进行转换

- (NSDictionary<NSString *,id> *)dictionaryWithValuesForKeys:(NSArray<NSString *> *)keys
时间: 2024-10-27 10:40:47

Foundation框架(5)字典转模型的相关文章

iOS MJExtension框架之字典数组转模型数组

1.下面这样的数组,怎么转成模型     2.分析 3.新增模型:城市分组,城市,区,每个模型都有name,抽一个父类 4.每个模型分别具备的属性 BaseModel : NSObject   属性 NSString *name CitySection : BaseModel  属性 NSArray *cities City : BaseModel 属性 NSArray *districts; 属性 BOOL hot; District : BaseModel  属性  NSArray *nei

iOS开发项目篇—25字典转模型第三方框架、运行时机制简介

iOS开发项目篇—25字典转模型第三方框架.运行时机制简介 一.使用第三方框架完成字典转模型 1.获取框架 在www.code4app.com网站中,搜索字典转模型 可以点击下载代码进行下载,也可以带github上去下载. 管理框架的好处:点击刷新按钮会刷新所有的项目. 2.使用 1.导入第三方框架 2.使用示例 错误提示: 在刷新的时候直接使用一行代码即可: 1 /**加载最新微博数据*/ 2 -(void)loadNewStatus 3 { 4 //1.获得请求管理者 5 AFHTTPReq

字典转模型框架 Mantle的使用:国外程序员最常用的iOS模型

Mantle简介 Mantle 是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary)和模型(即Objective对象)之间的相互转换,支持自定义映射,并且内置实现了NSCoding和NSCoping,大大简化归档操作. 为什么要使用Mantle 传统的模型层方案遇到的问题 通常我们用Objective-C写的模型层遇到了什么问题? 我们可以用  Github API 来举例.现在假

字典转模型第三方框架---MJExtension

字典转模型第三方框架 Mantle 所有模型都必须继承自MTModel JSONModel 所有模型都必须继承自JSONModel MJExtension 不需要强制继承任何其他类 设计框架需要考虑的问题 侵入性 侵入性大就意味着很难离开这个框架 易用性 比如少量代码实现N多功能 扩展性 很容易给这个框架增加新功能 MJExtension框架在gitHub的下载地址 https://github.com/CoderMJLee/MJExtension *:first-child { margin-

ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用

一:url转码,当url中涉及到中文的时候,要考虑转码,用UTF8对中文的url进行转码 #import "ViewController.h" @interface ViewController () @end @implementation ViewController #pragma mark ---------------------- #pragma mark Events -(void)touchesBegan:(NSSet<UITouch *> *)touche

黑马程序员-Foundation框架之数组和字典

一.Foundation框架简介 Foundation框架,顾名思义就是基础框架.基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础.OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类.要使用这个框架需要在引入头文件#import <Foundation/Foundation.h> 二.数组 NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组.下面通过代码来看一下它的一些基本的用法. 1 #import <Found

iOS开发——笔记篇&amp;关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结

关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 1 /******************************************************************************/ 2 一:简单plist读取 3 4 1:定义一个数组用来保存读取出来的plist数据 5 @property (nonatomic, strong) NSArray *shops; 6 7 2:使用懒加载的方

iOS开发UI基础—字典转模型(部分内容转载他人)

iOS开发UI基础-字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组来创建一个模型数组等等. 一.能完成功能的"问题代码" 1.从plist中加载的数据 2.实现的代码 1 // 2 // LFViewController.m 3 // 03-应用管理 4 // 5 // Created by apple on 14-5-22. 6 // Copyrigh

iOS-字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用

一:Plist读取 1 /******************************************************************************/ 2 一:简单plist读取 3 4 1:定义一个数组用来保存读取出来的plist数据 5 @property (nonatomic, strong) NSArray *shops; 6 7 2:使用懒加载的方式加载plist文件,并且放到数组中 8 // 懒加载 9 // 1.第一次用到时再去加载 10 // 2