在我们常见开发中往往需要将模型(对象)和字典相互转换,字典转模型(对象)相对简单,可以用系统方法快速实现,而模型(对象)转字典往往需要我们进行反向对应拼接,如果模型(对象)的属性键值太多,就会加大我们的工作量,这是我们就可以用使用Runtime机制快速获取(下面的model指我们需要互相转化的模型(对象)):
字典转模型(对象):
[model setValuesForKeysWithDictionary:dic];
使用这个方法快速赋值需要额外实现模型(对象)两个方法:
- (void)setNilValueForKey:(NSString *)key;//空值处理,处理web返回数据中的空值问题
- (void)setValue:(id)value forUndefinedKey:(NSString *)key;//用来处理字典中存在但是在模型(对象)中未定义的值
模型(对象)转字典:
1.导入runtime系统库
#import <objc/runtime.h>
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];
}
...
}
}
这样我们就完成了模型(对象)转字典的工作
网友评论