美文网首页
iOS 字典转模型runtime实现

iOS 字典转模型runtime实现

作者: 胖男技术渣 | 来源:发表于2020-07-07 16:09 被阅读0次

老样子直接上干货!

runtime获取模型类的所有成员变量的方法 

1. class_copyIvarList(Class _Nullable cls:表示获取哪个类中的成员变量, unsigned int * _Nullable outCount:表示这个类有多少成员变量,传入一个Int变量地址,会自动给这个变量赋值);

2. 获取成员变量名字 ivar_getName(@"");

3. 生成模型NSClassFromString(@"");

+ (instancetype)modelWithObject:(NSDictionary *)dict {

  // 首先创建目标类的对象

  id objc = [[self alloc] init];

  // 获取所有的成员变量, 并且获取数量

unsigned int count = 0;

Ivar *ivarList = class_copyIvarList(self, &count);

  // 遍历所有成员变量

  for (int i = 0; i < count; i++) {

    // 从数组中获取成员变量, (注意: Ivar成员变量是 "_"开头的)

    Ivar ivar = ivarList[i];

// 获取成员变量名字 

NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)]; 

// 获取成员变量类型 

NSString *ivarType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)]; 

    // 处理好成员变量的类型字符 去掉特殊符号

ivarType = [ivarType stringByReplacingOccurrencesOfString:@"\"" withString:@""];

ivarType = [ivarType stringByReplacingOccurrencesOfString:@"@" withString:@""];

    // 处理成员变量名->字典中的key(去掉 _ ,从第一个角标开始截取)

NSString *key = [ivarName substringFromIndex:1];

    // 根据成员属性名去字典中查找对应的value

id value = dict[key];

    // 判断值是否是数组

if ([value isKindOfClass:[NSArray class]]) {

      // 判断对应类有没有实现字典数组转模型数组的协议, 协议名称自己可以随便定义, 返回的字典里key对应的类的名称字符串

      // arrayContainModelClass 提供一个协议,只要遵守这个协议的类,都能把数组中的字典转模型

if ([self respondsToSelector:@selector(arrayContainModelClass)]) {

        // 转换成id类型,就能调用任何对象的方法

id idSelf = self;

// 获取数组中字典对应的模型 

NSString *type = [idSelf arrayContainModelClass][key]; 

// 生成模型 

Class classModel = NSClassFromString(type); 

NSMutableArray *arrM = [NSMutableArray array];

// 遍历字典数组,生成模型数组 

for (NSDictionary *dict in value) { 

// 字典转模型 

id model = [classModel modelWithDict3:dict];

           [arrM addObject:model];

         }

 // 把模型数组赋值给value 

        value = arrM;

      }

    }

// 如果模型属性数量大于字典键值对数理,模型属性会被赋值为nil,而报错 

if (value) { 

// 给模型中属性赋值

     [objc setValue:value forKey:key];

     }

  }

return objc;

}

相关文章

  • iOS 字典转模型 runtime实现

    写在前面的话 这篇文章的通过runtime实现字典转模型是参考(抄袭)iOS 模式详解—「runtime面试、工作...

  • Runtime实现iOS字典转模型

    在开发中,对于处理网络请求中获取的数据(即把请求到的json或字典转换成方便使用的数据模型)是我们在开发中必不可少...

  • iOS 字典转模型runtime实现

    老样子直接上干货! runtime获取模型类的所有成员变量的方法 1. class_copyIvarList(Cl...

  • iOS开发:runtime实现字典转模型

    实现思路: 遍历模型中所有属性,根据模型的属性名去字典中查找key,取出对应的的值,给模型的属性赋值 使用到的ru...

  • Runtime实现字典转模型

    导言:开发过程中可能需要根据字典(NSDictionary)转换成模型(Model),而Model一般都是用户自定...

  • runtime -- 实现字典转模型

    runtime与KVC字典转模型的区别:1.KVC:遍历字典中所有的key,去模型中查找有没有对应的属性名。2.r...

  • Runtime 其他相关

    Runtime常用场景 Runtime的应用都有哪些常用场景呢? 查看私有成员变量 字典转模型 替换方法实现 Ru...

  • iOS20-Runtime学习笔记(三)- 字典转模型

    Runtime字典转模型是iOS开发中常用的一个数据转化的方法,其核心是利用runtime消息转发机制,利用obj...

  • 字典转模型的runtime实现

    前言 我们在iOS开发中,一般会使用MVC或者MVVM等模式。当我们从接口中拿到数据时,我们需要把数据转成模型使用...

  • runtime实现字典转模型(一)

    在iOS开发中,我们肯定会遇到字典转模型.一般实现方案有下面几种:1.自己手写转,别喷我,虽然很少有人这么干,但确...

网友评论

      本文标题:iOS 字典转模型runtime实现

      本文链接:https://www.haomeiwen.com/subject/eotzqktx.html