美文网首页
runtime:字典转模型的应用

runtime:字典转模型的应用

作者: 动感超人丶 | 来源:发表于2017-04-13 13:13 被阅读11次

字典转模型一般都两种方式,1、图方便用的mj框架;2、自己在模型中写类方法,用KVC实现。

换换口味,尝试下runtime,如果想仅仅实现自己需要的功能其实很简单,就那几个C语言函数

实现两级嵌套字典的转换:
#import <objc/message.h>

  @implementation NSObject (Model)

  + (instancetype)modelWithDict:(NSDictionary *)dict{
  // 1.创建对应类的对象
  id objc = [[self alloc] init];

// runtime:遍历模型中所有成员属性,去字典中查找
// 属性定义在哪,定义在类,类里面有个属性列表(数组)
    unsigned int count = 0;
    Ivar *ivarList = class_copyIvarList(self, &count);
  for (int i = 0 ; i < count; i++) {
    // 获取成员属性
    Ivar ivar = ivarList[i];
    // 获取成员名
    NSString *propertyName = [NSString stringWithUTF8String:ivar_getName(ivar)];
    // 获取key(默认是以下划线开头的变量)
    NSString *key = [propertyName substringFromIndex:1];
    // 成员属性类型
    NSString *propertyType = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
    // user:NSDictionary
    // 二级转换
    // 值是字典,成员属性的类型不是字典,才需要转换成模型
    if ([value isKindOfClass:[NSDictionary class]] && ![propertyType containsString:@"NS"]) { // 需要字典转换成模型
        // 转换成哪个类型(转移符)
        NSRange range = [propertyType rangeOfString:@"\""];
        propertyType = [propertyType substringFromIndex:range.location + range.length];
        range = [propertyType rangeOfString:@"\""];
        propertyType = [propertyType substringToIndex:range.location];

        // 获取需要转换类的类对象
        Class modelClass =  NSClassFromString(propertyType);
        if (modelClass) {
            value =  [modelClass modelWithDict:value];
        }
    }
    if (value) {
        // KVC赋值:不能传空
        [objc setValue:value forKey:key];   
    }
}
return objc;

}
主要是 获取对象的属性列表: class_copyIvarList ,C语言字符串转OC: ivar_getName,再通过操作字符串,最后赋值。

相关文章

  • runtime:字典转模型的应用

    字典转模型一般都两种方式,1、图方便用的mj框架;2、自己在模型中写类方法,用KVC实现。 换换口味,尝试下run...

  • Runtime 其他相关

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

  • iOS开发 runtime应用

    1.runtime的作用 字典转模型 动态修改成员变量 方法交换 给分类添加属性 2.字典转模型 原文参考链接:h...

  • runtime字典转模型

    KVC:遍历字典中所有key,去模型中找有没有对应的属性名; Student *stu = [[Studental...

  • 字典转模型(runtime)

    接口返回的key转成属性名 model中嵌套子model 字典转模型

  • runtime字典转模型

    KVC实现字典转模型 模型类Status 其中,模型中的属性都是我通过上篇介绍的自动获取模型属性的方式来获得的外部...

  • Runtime字典转模型

    用一个分类实现字典转模型,分类头文件如下: 如果模型的属性有字典数组,想要将该字典数组转换成模型数组,那么在该模型...

  • runtime运行时之字典模型互转(二)

    上次介绍了runtime自动归档,这次我们来看一下非常常用的-字典转模型/模型转字典。很多朋友都会用到MJExte...

  • ios runtime 实现json转模型

    runtime 字典转模型,主要是利用runtime的class_copyIvarList方法来获取到类中的所有的...

  • 14-Swift中字典转模型

    字典转模型(初始化时传入字典) 字典转模型(利用KVC转化) 一、 普通的字典转模型: 二、利用KVC字典转模型:

网友评论

      本文标题:runtime:字典转模型的应用

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