打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
自定义实现setValuesForKeysWithDictionary

简单写了下,利用runtime机制,获取类成员变量,然后动态赋值。具体原理不说了,有兴趣的可以翻看前两篇文章。

Person 实体类:

  1. @interface Person : NSObject  
  2. {  
  3.     int height;  
  4. }  
  5.   
  6. @property(nonatomic,copy)NSString *name;  
  7. @property(nonatomic,assign)NSInteger age ;  
  8.   
  9. @end  

导入头文件:

#import <objc/runtime.h>

赋值函数:

  1. void test()  
  2. {  
  3.     NSDictionary *dic=@{@"_name":@"lisi",@"_age":@5,@"height":@185};  
  4.       
  5.     Person *per=[Person new];  
  6.     //获取成员变量列表  
  7.     unsigned int count=0;  
  8.     Ivar *vars= class_copyIvarList([per class], &count);  
  9.     if (vars!=NULL) {  
  10.         for (int i=0; i<count; i++) {  
  11.             Ivar var=vars[i];  
  12.             const charchar *var_name= ivar_getName(var);  
  13.             const charchar *var_type=ivar_getTypeEncoding(var);  
  14.             printf("%s %s\n",var_type,var_name);  
  15.             NSString *key=[NSString stringWithUTF8String:var_name];  
  16.             if (var_type[0]=='i') {  
  17.                 NSInteger tmp=[dic[key] integerValue];  
  18.                 object_setIvar(per, var, (__bridge id)(*(void**)&tmp));//注意int赋值方式  
  19.             }  
  20.             else {  
  21.                 object_setIvar(per, var, dic[key]);  
  22.             }  
  23.         }  
  24.     }  
  25.     else {  
  26.         printf("Person no vars.\n");  
  27.     }  
  28.     free(vars);  
  29. }  



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
runtime 运行时机制 完全解读
Swift/Objc的Runtime(运行时)机制
iOS模式详解runtime面试工作
我理解的iOS中的RunTime机制(1)
iOS:学习runtime的理解和心得
(译)Objective
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服