ios string转dic_IOS下将id类型快速转换为nsdictionary

在项目或者sdk接入中,经常会遇到需要讲id或者nsobject自定义的对象转换为字典或者json字符串。如果单个去读属性然后转换的话,会很麻烦。

这里我们构建一个类,通过runtime访问属性列表,然后将其转换为字典。

这里提供oc代码,如果在swift中使用的话,使用桥接文件即可。

BIDObjectToNsDictionary.h

#import

@interface BIDObjectToNsDictionary : NSObject

+ (NSDictionary*)getObjectData:(id)obj;

@end

BIDObjectToNsDictionary.m

#import "BIDObjectToNsDictionary.h"

#import

@implementation BIDObjectToNsDictionary

+ (NSDictionary*)getObjectData:(id)obj

{

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

unsigned int propsCount;

objc_property_t *props = class_copyPropertyList([obj class], &propsCount);//获得属性列表

for(int i = 0;i < propsCount; i++)

{

objc_property_t prop = props[i];

NSString *propName = [NSString stringWithUTF8String:property_getName(prop)];//获得属性的名称

id value = [obj valueForKey:propName];//kvc读值

if(value == nil)

{

value = [NSNull null];

}

else

{

value = [self getObjectInternal:value];//自定义处理数组,字典,其他类

}

[dic setObject:value forKey:propName];

}

return dic;

}

+ (id)getObjectInternal:(id)obj

{

if([obj isKindOfClass:[NSString class]]

|| [obj isKindOfClass:[NSNumber class]]

|| [obj isKindOfClass:[NSNull class]])

{

return obj;

}

if([obj isKindOfClass:[NSArray class]])

{

NSArray *objarr = obj;

NSMutableArray *arr = [NSMutableArray arrayWithCapacity:objarr.count];

for(int i = 0;i < objarr.count; i++)

{

[arr setObject:[self getObjectInternal:[objarr objectAtIndex:i]] atIndexedSubscript:i];

}

return arr;

}

if([obj isKindOfClass:[NSDictionary class]])

{

NSDictionary *objdic = obj;

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:[objdic count]];

for(NSString *key in objdic.allKeys)

{

[dic setObject:[self getObjectInternal:[objdic objectForKey:key]] forKey:key];

}

return dic;

}

return [self getObjectData:obj];

}

@end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值