简单写了下,利用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 char *var_name= ivar_getName(var);
const char *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);
}
版权声明:本文为jiajiayouba原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。