iOS 使用Runtime机制将模型(对象)和字典相互转换

在我们常见开发中往往需要将模型(对象)和字典相互转换,字典转模型(对象)相对简单,可以用系统方法快速实现,而模型(对象)转字典往往需要我们进行反向对应拼接,如果模型(对象)的属性键值太多,就会加大我们的工作量,这是我们就可以用使用Runtime机制快速获取(下面的model指我们需要互相转化的模型(对象)):

字典转模型(对象):

    [model setValuesForKeysWithDictionary:dic];

使用这个方法快速赋值需要额外实现模型(对象)两个方法:

    - (void)setNilValueForKey:(NSString *)key;//空值处理,处理web返回数据中的空值问题

    - (void)setValue:(id)value forUndefinedKey:(NSString *)key;//用来处理字典中存在但是在模型(对象)中未定义的值

模型(对象)转字典:

    1.导入runtime系统库

        #import

    2.初始化一个字典用来保存属性值

        NSMutableDictionary * attributeDic = [[NSMutableDictionary alloc]init];

    2.获取模型(对象)属性

        unsigned int count;//标示模型(对象)的属性数量

        objc_property_t *properties = class_copyPropertyList([model class], &count);

    3.properties中就包含model的所有属性信息,下面我们用for循环把属性取出来:

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

          objc_property_t property = properties[I];//其中一个属性信息

          NSString * key = [NSString stringWithUTF8String:property_getName(property)];//属性键值

           if ([model valueForKey:key]) {

                    if ([[obj valueForKey:key]isKindOfClass:[NSString class]] || [[obj              valueForKey:key]isKindOfClass:[NSNumber class]])   {

                        [attributeDic setObject:[model valueForKey:key] forKey:key];

                    }      

                    ...           

            }

        }

这样我们就完成了模型(对象)转字典的工作

        

你可能感兴趣的:(iOS 使用Runtime机制将模型(对象)和字典相互转换)