IOS之字典转模型
来源:互联网 发布:foreach循环遍历数组 编辑:程序博客网 时间:2024/06/08 15:58
iOS支持KVC,所以字典转模型变得超级简单。
我们希望我们写的字典转模型是通用的,这样我就想到用Category,加到Object里面。
然后创建一个Category
Student* st = [Student gh_objWithDict:studentDict];
我们希望我们写的字典转模型是通用的,这样我就想到用Category,加到Object里面。
然后创建一个Category
@interface NSObject (gh_dict)//添加两个方法 //第一个方法,是一个类方法,可以通过字典转换成对象 +(instancetype)gh_objWithDict:(NSDictionary*)dict;//第二个方法,当字典的key与属性不匹配的时候,进行匹配-(NSDictionary*)gh_exchangeDict; @end
@implementation NSObject (gh_dict)+(instancetype)gh_objWithDict:(NSDictionary*)dict{ id obj = [self new]; /* 通常我我们使用的方法是setValueForKey,但是当我们进行批量操作的时候 系统为我们实现了将整个字典,通过KVC赋值到对象, 不过当我们的字典的key在属性里面没有的时候,系统会抛一个UndefinedKey的异常,导致程序崩溃 */ [obj setValuesForKeysWithDictionary:dict]; return obj;}/* 由于上面讲的,字典的key在属性里面没有的时候,程序崩溃,所以我们可以通过重写下面方法来避免崩溃 (因为系统的默认实现就是抛异常,所以重写该方法就不会崩溃,这很好理解)*/-(void)setValue:(id)value forUndefinedKey:(NSString *)key{ //我们通过gh_exchangeDict方法,给调用方一次匹配的机会,比如我们的字典和属性都有,但是不匹配,这时候我们需要存储一个对应关系 //默认的实现就是return nil NSDictionary* exchangeDict = [self gh_exchangeDict]; if (exchangeDict) { //当匹配字典存在的时候,通过字典key得到属性名 NSString* newKey = exchangeDict[key]; //kvc赋值 [self setValue:value forKey:newKey]; }}-(NSDictionary *)gh_exchangeDict{ return nil;}@end
//创建一个测试的类,学生类,有年龄,性别,名字@interface Student:NSObject@property(nonatomic,assign) int age;@property(nonatomic,copy) NSString* name;@property(nonatomic,assign) BOOL sex;@end@implementation Student//重写匹配字典 -(NSDictionary*)exchangeDict{ return @{@"Age":@"age"};}@endclient端代码: //字典 NSDictionary* studentDict = @{@"Age":@(5),@"name":@"张三",@"sex":@(NO),@"other":@"hehe"};//字典转模型
Student* st = [Student gh_objWithDict:studentDict];
调试过程中,我们发现已经成功的转换了。
0 0
- IOS之字典转模型
- iOS数据处理之字典转模型
- iOS开发之字典转模型
- IOS字典转模型
- ios 字典转模型
- iOS 字典转模型
- iOS 字典转模型
- iOS 字典转模型
- ios-字典转模型
- 2、iOS 开发之字典转模型和 xib
- IOS学习之——字典转模型 加载plist
- IOS 学习 字典转模型
- IOS中的字典转模型
- iOS 字典转模型示例
- ios开发--字典转模型
- iOS runtime字典转模型
- iOS 字典自动转模型
- iOS 数组/字典转模型
- Android性能优化-内存泄漏1
- C#通过文件路径获取文件名
- 图片压缩方法
- Lua 迭代器和一般for
- #3.Linux的文件目录管理
- IOS之字典转模型
- iis7如何添加mime类型支持所有后缀名文件下载的方法(解决特殊后缀文件无法下载的问题)
- 【HDU】 5768 Lucky7
- |Tyvj|动态规划|P1015 公路乘车
- Android的线程和线程池
- 2>&1的含义
- 三栏式布局
- python学习-str list
- eclipse配置上传文件的虚拟路径(多坑版)