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

Runtime实现字典转模型

作者: jackli007 | 来源:发表于2018-11-07 10:04 被阅读0次

导言:开发过程中可能需要根据字典(NSDictionary)转换成模型(Model),而Model一般都是用户自定义的类继承自NSObject,所以可以对NSObject新建一个分类(Category)。

分析:一般Model可能有多个存储属性,而字典中存储的也是多个键值对key-value),所以需要对遍历Model的属性,然后比对字典中的key,如果key和属性的名称相同,则通过KVC的方式将该value赋值给该属性。遍历Model的属性数组,就可以使用Runtime的方式取出该类的属性。

代码:

  • .h文件
#import <Foundation/Foundation.h>

@interface NSObject (LSHExtension)

/**
 字典转模型

 @param dic 字典
 @return instancetype
 */
+ (instancetype)objWithDic:(NSDictionary *)dic;

@end
  • .m文件
#import "NSObject+LSHExtension.h"
#import <objc/runtime.h>

@implementation NSObject (LSHExtension)

+ (instancetype)objWithDic:(NSDictionary *)dic {
   
    id object = [[self alloc] init];
    
    NSArray *propertyList = [self getProperties];
    
    //遍历字典的所有的key
    [dic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        //属性中有该字典中的key,才可以赋值
        if ([propertyList containsObject:key]) {
            [object setValue:obj forKey:key];
        }
    }];
    
    return object;
}


+ (NSArray *)getProperties {
    //存储所有的property的名称
    NSMutableArray *propertyNames = [NSMutableArray array];
    //属性个数
    unsigned int count = 0;
    //通过Runtime获取当前类的所有属性
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    //遍历所有的属性,获取所有的属性名称
    for (int i = 0; i < count; i ++) {
        
        objc_property_t property = properties[i];
        
        const char * propertyName = property_getName(property);
        
        [propertyNames addObject:[NSString stringWithUTF8String:propertyName]];
    }
    //释放
    free(properties);
    return propertyNames;
}

@end

相关文章

  • 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/sxjmxqtx.html