runtime -- 实现字典转模型

作者: 我的梦想之路 | 来源:发表于2016-06-12 22:12 被阅读279次

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

#依旧是NSObjcet的model分类
//字典转模型 -- runtime 实现
#import <Foundation/Foundation.h>
#import <objc/message.h>

@interface NSObject (Model)
+ (instancetype)modelWithDict:(NSDictionary *)dict;
@end
# .m文件中
+ (instancetype)modelWithDict:(NSDictionary *)dict{

  // 创建对应类的对象
  id objc =[[self alloc] init];


/**
runtime:遍历模型中的属性名。去字典中查找。
属性定义在类,类里面有个属性列表(即为数组)
*/
# 方法名:class_copyIvarList(<#__unsafe_unretained Class cls#>, <#unsigned int *outCount#>) 
    // 遍历模型所有属性名
  #1. ivar : 成员属性(成员属性为带_name,而name为属性,属性与成员属性不一样。)
  #2. class_copyIvarList:把成员属性列表复制一份给你
  #3. cmd + 点击 查看方法返回一个Ivar *(表示指向一个ivar数组的指针)

  #4.class:获取哪个类的成员属性列表
  #5.count : 成员属性总数
unsigned int count = 0;
Ivar *ivarList = class_copyIvarList(self, &count);  

// 遍历
  for (int i = 0; i< count; i++){
    Ivar ivar = ivarList[i];
    // 获取成员名(获取到的是C语言类型,需要转换为OC字符串)
    NSString *propertyName = [NSString stringWithUTF8String:ivar_getName(ivar)];
  
    // 成员属性类型
    NSString *propertyType = [NSString stringWithUTF8String: ivar_getTypeEncoding(ivar)];

    // 首先获取key(根据你的propertyName 截取字符串)
     NSString *key = [propertyName substringFromIndex:1];
    // 获取字典的value
    id value = dict[key];

     // 给模型的属性赋值
    // value : 字典的值
    // key : 属性名
    if (value){  // 这里是因为KVC赋值,不能为空
       [objc setValue:value forKey:key];

    }
   NSLog(@"%@  %@",propertyType,propertyName);
  }

NSLog(@"%zd",count); // 这里会输出self中成员属性的总数
 return objc;
}
#viewController中
NSMutableArray *models = [NSMutableArray array];
for (NSDictionary *dict in dictArr){
      // 字典转模型(别忘记导入model类)
    Model *modle = [Model modelWithDict:dict];
    
   [models addOBject:model];
}
NSLog(@"%@",models);

这里就完结了,有点难理解。特别是Ivar,是runtime的东西。

记住就好了。因为我也还不是很清楚。晚安,好梦

相关文章

  • Runtime实现字典转模型

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

  • runtime -- 实现字典转模型

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

  • iOS 字典转模型 runtime实现

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

  • Runtime 其他相关

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

  • 字典转模型的runtime实现

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

  • Runtime实现iOS字典转模型

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

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

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

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

    上篇文章写了,runtime实现一级转换的代码,但是我们开发中二级转换也是很常用的,下面我就讲解一下二级转换的思路...

  • 利用Runtime实现字典转模型

    参考自:http://www.jianshu.com/p/836f07bb468e Runtime 是一种面向对象...

  • 使用RunTime实现字典转模型

    具体实现代码请看GItHub如果觉得不错,请start一下,谢谢! 1.如何快速生成Plist文件属性名 实现原理...

网友评论

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

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