IOS自动获取类的所有属性存入字典以及从字典中给类的属性自动赋值

在做IOS开发的时候,有时需要将Dictionary对象转换为对应的实体类,例如做Json解析的时候,一般会先使用NSJSONSerialization将Json字符串解析成NSDictionary对象,然后使用NSObject的方法setValuesForKeysWithDictionary将NSDictionary解析为实体对象,这里提供另一种方法实现setValuesForKeysWithDictionary的功能:

unsigned int count;
objc_property_t* props = class_copyPropertyList(class, &count);
for (int i = 0; i < count; i++) {
  objc_property_t property = props[i];
  NSString *name = @(property_getName(property));
  id object = [dict objectForKey:name];
  if (object != nil) { // 如果字典中存储了该属性
    NSString *attrs = @(property_getAttributes(property));
    [self setValue:object forKey:name];
  }
}
free(props);

然后是反向操作,获取实体类的属性存入字典:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
unsigned int count;
objc_property_t *properties = class_copyPropertyList(class, &count);
for (int i = 0; i < count; i++) {
  objc_property_t property = properties[i];
  NSString *name = @(property_getName(property));
  id value = [self valueForKey:name];
  if (value) {
    [dict setObject:value forKey:name];
  }
}
free(properties);

利用这两个方法结合NSJSONSerialization可以实现一个简单的Json库,当然这只是最简单的情况,对不能存入字典的属性还需做转换,另外还要处理父类的属性(可以先获取父类的class对象class_getSuperclass(class),然后用同样的方法处理)。

转载于:https://www.cnblogs.com/jumtop/p/7594840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值