美文网首页
字典转模型(runtime)

字典转模型(runtime)

作者: hanryChen | 来源:发表于2017-01-12 11:56 被阅读0次
接口返回的key转成属性名
+ (NSDictionary*)lj_replacedKeyWithProperty {
    return @{@"propertyName":@"key"};
}
model中嵌套子model
+ (NSDictionary*)lj_modelWithArrayObject { 
    return @{@"key":@"subModel"}; 
}
字典转模型
+ (instancetype)lj_modelWithDict:(NSDictionary*)dict { 

     id objc = [[self alloc] init]; 

     unsigned int count = 0; 

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

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

     Ivar iva = ivar[i]; 

     NSString *name = [NSString stringWithUTF8String:ivar_getName(iva)]; 

     NSString *type = [NSString stringWithUTF8String:ivar_getTypeEncoding(iva)]; 

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

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

    name = [name substringFromIndex:1]; 

   NSString *key = [NSString stringWithString:name]; 

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

          NSString *object = [[self lj_replacedKeyWithProperty] objectForKey:key]; 

          if(object) { 

               key = object; 

          } 

     } 

          id value = dict[key]; 

          if(!value) { 

               continue; 

          }

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

          if([[[self lj_modelWithArrayObject] allKeys] containsObject:name]) {

              NSString *object = [[self lj_modelWithArrayObject] valueForKey:name];

               Class subClass = NSClassFromString(object);

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

                    value = [subClass lj_modelWithDict:value];

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

                    NSMutableArray*array = [NSMutableArray new];

                    for(id subDict in value) {

                         id subObject = [subClass lj_modelWithDict:subDict];

                         [array addObject:subObject];

                     }

                    value = [NSArray arrayWithArray:array];

               }
     
           }

          }

     [objc setValue:value forKey:name];

     }

     return objc;

}

相关文章

  • runtime字典转模型

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

  • 字典转模型(runtime)

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

  • runtime字典转模型

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

  • Runtime字典转模型

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

  • iOS开发 runtime应用

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

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

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

  • ios runtime 实现json转模型

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

  • 14-Swift中字典转模型

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

  • Runtime实现字典转模型

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

  • 利用Runtime 字典转模型

    OBJC_EXPORT Ivar *class_copyIvarList(Class cls, unsigned ...

网友评论

      本文标题:字典转模型(runtime)

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