简单写了下,利用runtime机制,获取类成员变量,然后动态赋值。具体原理不说了,有兴趣的可以翻看前两篇文章。
Person 实体类:
- @interface Person : NSObject
- {
- int height;
- }
-
- @property(nonatomic,copy)NSString *name;
- @property(nonatomic,assign)NSInteger age ;
-
- @end
导入头文件:
#import <objc/runtime.h>
赋值函数:
- void test()
- {
- NSDictionary *dic=@{@"_name":@"lisi",@"_age":@5,@"height":@185};
-
- Person *per=[Person new];
- //获取成员变量列表
- unsigned int count=0;
- Ivar *vars= class_copyIvarList([per class], &count);
- if (vars!=NULL) {
- for (int i=0; i<count; i++) {
- Ivar var=vars[i];
- const charchar *var_name= ivar_getName(var);
- const charchar *var_type=ivar_getTypeEncoding(var);
- printf("%s %s\n",var_type,var_name);
- NSString *key=[NSString stringWithUTF8String:var_name];
- if (var_type[0]=='i') {
- NSInteger tmp=[dic[key] integerValue];
- object_setIvar(per, var, (__bridge id)(*(void**)&tmp));//注意int赋值方式
- }
- else {
- object_setIvar(per, var, dic[key]);
- }
- }
- }
- else {
- printf("Person no vars.\n");
- }
- free(vars);
- }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。