博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用runtime字典转模型
阅读量:4452 次
发布时间:2019-06-07

本文共 1417 字,大约阅读时间需要 4 分钟。

目的:

  在日常开发中我们从字典中取出数据时,往往有可能会因为字典某一个key为关键字,或者我们自己改了,而模型里面可能一共有几十个属性,那么难道我们还要去一个个去写,那还不写到吐血。今天我就来分享如何使用runtime来把字典转换成模型.(这里字典里面是id,但是是关键字,所以模型里面我们是用的ID,所以需要转换)

 

步骤

  1.首先依然是不要忘记导入头文件

#import 

 

  2.首先自定义一个类方法,用来字典转模型,传入参数要转换的字典,还一个就是用来存放被你修改的属性(这里的mapDict)

+ (instancetype)objcWithDict:(NSDictionary *)dict mapDict:(NSDictionary *)mapDict

 

  3.利用传入的字典转换成模型具体步骤

    - 通过runtime获取当前类的所有属性

    - 利用字典取值,判断有没有值,因为是直接用字典取值,不会报错,如果是空证明没有这个key

    - 这时我们就直接用这个key去后面一个映射字典里面取,看看有没有映射的,这里面有,所以就这样从@“ID”转换成了@“id”

    - [objc setValue:value forKeyPath:ivarName] 成功给模型里面赋值

+ (instancetype)objcWithDict:(NSDictionary *)dict mapDict:(NSDictionary *)mapDict{    id objc = [[self alloc] init];            // 遍历模型中属性    unsigned int count = 0;    Ivar *ivars = class_copyIvarList(self, &count);        for (int i = 0 ; i < count; i++) {        Ivar ivar = ivars[i];                // 属性名称        NSString *ivarName = @(ivar_getName(ivar));                        ivarName = [ivarName substringFromIndex:1];                id value = dict[ivarName];        // 需要由外界通知内部,模型中属性名对应字典里面的哪个key        // ID -> id        if (value == nil) {            if (mapDict) {            NSString *keyName = mapDict[ivarName];                            value = dict[keyName];            }        }                [objc setValue:value forKeyPath:ivarName];               }    return objc;}

 

  

 

转载于:https://www.cnblogs.com/samyangldora/p/4621279.html

你可能感兴趣的文章
ssh服务不能远程时,使用telnet远程登录
查看>>
微信小程序开发踩坑记录
查看>>
怎样花两月时间去应聘互联网公司
查看>>
CSAPP lab1 datalab-handout(深入了解计算机系统 实验一)
查看>>
tc 146 2 RectangularGrid(数学推导)
查看>>
PHP 新建动态类的代码
查看>>
iOS学习笔记之正则表达式
查看>>
Android解决Fragment多层嵌套时onActivityResult无法正确回调的问题
查看>>
[iOS]转:iOS最佳实践
查看>>
Problem08 输入数字求和
查看>>
Eclipse配置问题
查看>>
python sublime run快捷键设置
查看>>
Hello Word
查看>>
Python小练习004
查看>>
xcode5的Command Line Tools安装
查看>>
Java 系统学习梳理_【All】
查看>>
js中prototype用法(转)
查看>>
POJ 3667 线段树的区间合并简单问题
查看>>
汇编学习2:关于编译过程和后缀名 .s和.S的区别
查看>>
Linq调试实时输出信息扩展方法(摘抄)
查看>>