美文网首页
关于iOS字典转模型几种方法

关于iOS字典转模型几种方法

作者: 丶逝水流年 | 来源:发表于2017-04-29 08:59 被阅读570次

别人写的,写的不错,收藏一波

1:KVC    2:runTime字典转模型

先说说两种的不同:KVC是遍历字典中的key值,去模型类里面去查找有没有所对应的key,runtime反之是遍历属性在字典里面去查找有没有对应的key,在实际开发中,因为后台返回的数据比较多,可用的字段就比较少,所以用runtime效率较高。

KVC原理:键值编码是用来间接访问对象属性的机制,通过setValue:forKey和ValueForkey来访问成员变量,代码量比较少使用比较简单。

使用方法:

1.创建一个Model类,在.h里面声明两个方法,并且声明需要的属性(可以参照我写的自动声明属性去完成这个步骤)

- (instancetype)initWithDictionary:(NSDictionary *)dict;

+ (instancetype)provinceWithDictionary:(NSDictionary *)dict;

2.在.m里面去实现

- (instancetype)initWithDictionary:(NSDictionary *)dict

{

if (self = [super init]) {

[self setValuesForKeysWithDictionary:dict];

}

return self;

}

+ (instancetype)provinceWithDictionary:(NSDictionary *)dict

{

return [[self alloc] initWithDictionary:dict];

}

3.在这里我们直接可以在ViewController里面调这个方法

VisitorModel *model = [VisitorModel provinceWithDictionary:temDic];就完成了赋值了

注意:我们在使用KVC过程中因为是通过字典去在你模型类里面去查找有没有这个属性:或者字典里面有关键字:程序会抛出异常,这里我们要玩成一个方法:

-(void)setValue:(id)value forUndefinedKey:(NSString *)key{

}

这个写着就没事了,如果是id类型,我们先声明一个ID属性,然后给它赋值。

KVC的使用就介绍这么多,使用起来也是很方便的。

第二种:runtime字典转模型

先说说一级的字典转模型

步骤1.首先创建一个model类还是通过我封装的自动声明属性,然后把输出的粘贴到.h里面

步骤2:直接调用我这封装的就可以了,封装内部的原理如下

1.创建一个分类 NSObject (model)

2,在.h里面写一个方法

+(instancetype)modelWithDic:(NSDictionary*)dict;只需要传入一个字典就会自动转模型的

3.在.m里面实现方法

+(instancetype)modelWithDic:(NSDictionary*)dict{

1.先创建一个类的对象

id objc =  [[self alloc]init];

2.//这里需要穿一个cout的地址,其中cout就是成员属性总数

unsigned int count = 0;

3这个方法是把传进来的Model的成员变量属性复制一分,其中Ivar*实际上就是只想一个成员变量的数组(注意区分成员属性和属性)

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

4.遍历这个数字,此时count的值已经变成你成员变量属性的个数

for (int i=0; i

(1):获取到一个成员属性名

Ivar ivar1 = ivarPlist[i];

(2):获取到成员名

NSString *propertyName =    [NSString stringWithUTF8String: ivar_getName(ivar1)]

(3.)获取到成员属性(这个返回值是c语言,所以转换了一下)

NSString *propertyType =    [NSString stringWithUTF8String:      ivar_getTypeEncoding(ivar1)];

(4),获取key(注意成员属性和属性的区别)

NSString *key = [propertyName substringFromIndex:1];

(5),获取Value

id Value= dict[key];

(6).通过KVC进行赋值(因为Value如果为空,直接Crash,所以这里判断了一下,如果有值再去赋值)

if (Value) {

[objc setValue:Value forKey:key];//用kvc复制value不能为空

}

(7).return objc;

}

这个方法也是比较容易理解的,上面只是介绍了一级字典转模型,二级其实也非常简单

二级字典转模型:

假如我们返回数据里面有一个字典,字典里面还有一个字典,我们我们必须再创建一个UserMode类,然后自动生成属性,然后@class User;   再Model.h里面声明这个属性。

继续在上面的for循环里面实现一下代码:

判断Value类型是不是字典,或者属性名称不包含NSDictionary

if ([Value isKindOfClass:[NSDictionary class]] &&![propertyType containsString:@"NS"]) {

1.直接将属性类型转换成类

Class modelClass =NSClassFromString(propertyType);

2.直接给赋值

if (modelClass) {

Value =  [modelClass modelWithDic:Value];

}

[注意:这里是不行的,因为第类型转换成类返回值不是User  而是@\"user “\],所以你要进行字符串截取,具体

propertyType substringFromIndex:range.location +range.length]

range =[propertyType rangeOfString:@"\""];

propertyType = [propertyType substringToIndex:range.location];

Class modelClass =NSClassFromString(propertyType);

}

相关文章

  • 关于iOS字典转模型几种方法

    别人写的,写的不错,收藏一波 1:KVC 2:runTime字典转模型 先说说两种的不同:KVC是遍历字典中的k...

  • 14-Swift中字典转模型

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

  • iOS简单字典转模型

    使用方法:setValuesForKeysWithDictionary 进行字典转模型

  • 字典转模型

    字典转模型 1.老方法:按照字典中的key创建模型的属性,然后为模型创建一个方法,接收字典参数,在方法里进行属性赋...

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

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

  • iOS 字典转模型

    字典转模型 1.简单的字典转模型 2.字典中包含数组 2.1首先在头文件创建一个数组包含子模型 2.2在.m文件中...

  • iOS 字典转模型

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

  • iOS 模型转字典

    模型转字典 https://www.jianshu.com/p/8e340363ae8f

  • IOS字典转模型

    1.定义字典和方法 2.实现转模型方法 3.声明常量 4.懒加载plist文件赋值给常量

  • iOS字典转模型

网友评论

      本文标题:关于iOS字典转模型几种方法

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