利用runtime实现NSObject和NSMutableDictionary互转

原创
2016/03/28 11:48
阅读数 244

首先导入头文件

#import <objc/runtime.h>

然后利用runtime实现,代码如下

#pragma mark -
#pragma mark 根据<Bean>对象转换成<NSMutableDictionary> 采用runtime查找的
- (NSDictionary *)objectPropertys:(id)objectBean{
    NSMutableDictionary * objDic=[[NSMutableDictionary alloc]init];
    unsigned int outCount, i;
    objc_property_t *properties = class_copyPropertyList([objectBean class], &outCount);
    for (i = 0; i<outCount; i++)
    {
        //取到变量名
        const char* char_f =property_getName(properties[i]);
        NSString *propertyName = [NSString stringWithUTF8String:char_f];
        //取到变量值
        id propertyValue=[objectBean valueForKey:propertyName];
        if(propertyValue){
            [objDic setObject:propertyValue forKey:propertyName];
        }
    }
    free(properties);
    return objDic;
}

#pragma mark -
#pragma mark 将<NSMutableDictionary>类型转成<Bean>
-(id)objectPropertysForList:(Class)beanClass dic:(NSDictionary*)dic{
    id obj = [[beanClass alloc] init];
    unsigned int outCount, i;
    objc_property_t *properties = class_copyPropertyList(beanClass, &outCount);
    for (i = 0; i<outCount; i++)
    {
        //取到变量名
        const char* char_f =property_getName(properties[i]);
        NSString *propertyName = [NSString stringWithUTF8String:char_f];
        if([dic objectForKey:propertyName]){
            [obj setValue:[dic objectForKey:propertyName] forKey:propertyName];
        }else{
            [obj setValue:nil forKey:propertyName];
        }
    }
    free(properties);
    return obj;
}

举个使用栗子,建立一个userBean类

@interface UserBean : NSObject

@property NSString * userid;
@property NSString * userName;
@property NSString * password;
@property NSString * sex;
@property NSString * age;
@property NSString * tel;

@end

然后建立一个userBean对象,调用方式

NSDictionary * obj=[self objectPropertys:userBean];
NSDictionary * line=[list objectAtIndex:k];//这边得到userBean有关的键值对
UserBean userBean=[self objectPropertysForList:[userBean class] dic:line];


展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部