文档章节

利用runtime实现NSObject和NSMutableDictionary互转

luoruowen
 luoruowen
发布于 2016/03/28 11:48
字数 325
阅读 87
收藏 0

首先导入头文件

#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];


© 著作权归作者所有

luoruowen

luoruowen

粉丝 2
博文 9
码字总数 4663
作品 1
福州
程序员
私信 提问
iOS 框架--MJExtension-Swift

1.这个框架是做什么的? .这个框架可以理解为MJExtension的Swift版本,主要是实现类反射,并在实现反射功能的基础上实现字典-模型一键互转! MJExtension(OC): https://github.com/CoderMJL...

nsdictionary
2015/07/13
2.6K
2
利用runtime实现字典转模型

描述: KVC的字典转模型具有一个缺陷,就是属性的数量与名称都必须保持一致,如果字典中的属性多,而模型中没有使用KVC赋值的时候就会崩溃,需要实现另一个方法 setValue:forUndefinedKey:方...

JlongTian
2016/01/03
60
0
Objective-C - Foundation框架初探

Objective-C - Foundation框架初探 Foundation之于Objective-C就好比Java中SDK类库之于Java。 这个框架提供了基本的Objective-C的类,最重要的根类,NSObject,它定义了基本的对象行为。 框架...

开发小菜鸟一枚
2013/11/06
67
0
从YYModel源码中可以学到什么:前篇

前言 一个高性能模型框架。 作者在上给出的性能对比图(iphone 6 y:时间) :具体以下特点:高性能、自动类型转换、类型安全、非侵入性、轻量等。 关于如何使用查看文档和示例【传送门】。 本...

Owenli_千
2017/12/29
0
0
runtime讲解

接着讲runtime的应用,也是最重要的 1.字典转模型 说的字典转模型很多人会想到KVC,然后重写 - (void)setValue:(id)value forUndefinedKey:(NSString *)key方法,为什么要重写呢,因为kvc字典...

刀客445
2016/05/21
50
0

没有更多内容

加载失败,请刷新页面

加载更多

数据流中的中位数

参考:https://sunweiguo.github.io/2019/03/18/%E5%89%91%E6%8C%87offer/%E3%80%90%E9%9D%A2%E8%AF%95%E9%A2%9863-%E6%95%B0%E6%8D%AE%E6%B5%81%E4%B8%AD%E7%9A%84%E4%B8%AD%E4%BD%8D%E6%95......

Garphy
17分钟前
4
0
微服务下配置管理中心 SCCA

SCCA 简介 SCCA 全称 spring-cloud-config-admin,微服务下 Spring Boot 应用(包含 Spring Cloud)统一的配置管理平台。 Github 地址:spring-cloud-config-admin 核心贡献者:程序员DD | ...

SpringForA
20分钟前
5
0
spring 是如何注入对象的和bean 创建过程分析

文章目录: beanFactory 及 bean 生命周期起步 BeanFactory refresh 全过程 BeanFactoryPostProcessor 和 BeanPostProcessor 解析 使用 BeanPostProcessor 实现 aop 和 springboot Cache 相关......

sanri1993
23分钟前
9
0
@PathVariable使用

public interface ProductInfoRepository extends JpaRepository<ProductInfo, String>{ List<ProductInfo> findByProductId(String productId);} ProductInfoController @Autowired ......

观海562
34分钟前
6
0
利用CSS禁止手机长按出现气泡: 复制、选择等功能

可以用 * ,也可作用于一个div div{  -webkit-touch-callout:none;  /*系统默认菜单被禁用*/  -webkit-user-select:none; /*webkit浏览器*/  -khtml-user-select:none; /*早期浏览...

蓝小驴
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部