美文网首页
runtime之字典转模型

runtime之字典转模型

作者: lbfly_boy | 来源:发表于2017-03-18 18:44 被阅读11次

runtime可以做很多事情,这里不一一列举。很多三方库都是通过runtime来完成字典转模型大体思路如下:

1. 遍历模型中的属性,然后拿到属性名作为键值去字典中寻找值.

2. 找到值后根据模型的属性的类型将值转成正确的类型

3.利用kvc完成属性的赋值


第一步:遍历模型中的属性,然后拿到属性名作为键值去字典中寻找值

我们可以通过一个分类来获取所有属性

获取对象属性及属性类型

上面这些类型,是类型编码,在苹果文档中告诉了我们编码对应的类型:

类型编码

根据图表,我们将常用的几个编码定义成常量字符串或者宏表示它所对应的类型

类型关系对应

设置属性类型type

设置属性type

然后进行下一步----2.用该属性名作为键去字典中寻找对应的值.

id value = [keyValues valueForKey:property.name];

if(!value)continue;

接下来是第三步:3.拿到值后将值的类型转换为属性对应的数据类型.

if(type.isNumberType){ if([valueisKindOfClass:[NSStringclass]])value= [[[NSNumberFormatter alloc]init] numberFromString:value];}

其中有一种情况,是需要进行特殊处理的.当模型的属性是char类型或者bool类型时,获取到的编码都为c,并且bool还有可能是B编码,它们都对应_boolType.因为数字类型包含布尔类型,所以bool类型要在数字类型的条件下进行额外判断.

if(type.isNumberType){            NSString *oldValue = value;// 字符串->数字if([valueisKindOfClass:[NSStringclass]]){value = [[[NSNumberFormatter alloc] init]numberFromString:value];if(type.isBoolType) {                    NSString *lower = [oldValue lowercaseString];if([lowerisEqualToString:@"yes"] || [lowerisEqualToString:@"true"] ) {                        value =@YES;                    }elseif([lowerisEqualToString:@"no"] || [lowerisEqualToString:@"false"]) {                        value =@NO;                    }                }            }        }

然后处理其他类型转成字符串类型的情况.

else{if(typeClass == [NSStringclass]) {if([valueisKindOfClass:[NSNumberclass]]) {if(type.isNumberType)// NSNumber -> NSStringvalue= [valuedescription];                }elseif([valueisKindOfClass:[NSURLclass]]){// NSURL -> NSStringvalue= [valueabsoluteString];                }            }        }

KVC赋值

[self setValue:value forKey:property.name];

相关文章

  • runtime之字典转模型

    runtime可以做很多事情,这里不一一列举。很多三方库都是通过runtime来完成字典转模型大体思路如下: 1....

  • runtime字典转模型

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

  • 字典转模型(runtime)

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

  • runtime字典转模型

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

  • Runtime字典转模型

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

  • iOS开发 runtime应用

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

  • runtime笔记 之 字典转模型

    先看例子 Model 类 NSObject的分类 测试 class_copyPropertyList的说明 与此类...

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

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

  • ios runtime 实现json转模型

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

  • 14-Swift中字典转模型

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

网友评论

      本文标题:runtime之字典转模型

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