美文网首页
关于Json转model的一些小想法

关于Json转model的一些小想法

作者: 养个小东西 | 来源:发表于2018-08-31 11:45 被阅读16次


1、json转model的核心设计思想就是使用runtime+递归的思想

runtime的思想:

第一步:取出类里面的所有成员变量

1、    Ivar* ivarList =class_copyIvarList(className, &count);

第二步:遍历ivarList,获取每个成员变量的名称和类型

   for(inti =0; i

        //根据下标获取成员变量

        Ivarvar = ivarList[i];

        //获取成员变量的名字

        NSString * propertyName = [NSString stringWithUTF8String:ivar_getName(var)];

        //获取成员变量的类型

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

        //去掉“_”方便取出dict中的数值

        NSString* dictKey = propertyName;

        if([propertyNamehasPrefix:@"_"]) {

            dictKey = [propertyNamestringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@""];

        }

        //简化属性的数据类型

        if(![typeisEqualToString:@"f"]) {

            type = [typestringByReplacingCharactersInRange:NSMakeRange(0, 2) withString:@""];

            type = [typestringByReplacingCharactersInRange:NSMakeRange(type.length-1, 1) withString:@""];

        }

第三步:判断成员变量的类型

(1)如果是成员变量是NSString,NSNumber,float 等基本数据类型

则可以直接取出json里面的value赋值给model

(1)如果是成员变量是array

1、array包含的是基础的数据类型,则可以直接取出json里面的value赋值给model

2、array包含的是其他的自定义的model,这个时候则需要采用递归的方法

(2)如果是成员变量是dict这个时候也需要递归的方法

建议:创建模型的时候不要创建float,用NSnumber替换,使用float会出现进度不准确的问题

涉及到float类型数据计算的问题,建议将NSnumber转化成NSDecimalNumber,然后使用NSDecimalNumber提供的方法计算

Demo地址


相关文章

网友评论

      本文标题:关于Json转model的一些小想法

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