#import "model.h" #import <objc/runtime.h> @implementation model +(instancetype)modelWithDict:(NSDictionary *)dict { model *mo = [[model alloc] init]; // 得到属性数组. NSArray *array = [mo getProperties]; // 根据属性的值,去数据字典中取对应的值 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { // key 属性值. NSString *key = obj; if (dict[key]) { // 为了保证安全. [mo setValue:dict[key] forKey:key]; } }]; // 赋值的时候,需要根据自身的属性值,来取dict字典中的属性. // 首先,需要能够获得 model 中的属性. // [mo setValuesForKeysWithDictionary:dict]; return mo; } // 动态的获取某一个类的属性. - (NSArray *)getProperties { unsigned int count; // 获取一个类中的属性 objc_property_t *properties = class_copyPropertyList(self.class, &count); NSMutableArray *array = [NSMutableArray array]; // 遍历类中的属性,将每一个属性值都转换成 OC 的字符串 for (int i = 0; i < count; i++) { // pro 依然是 C 语言的数据类型 objc_property_t pro = properties[i]; // 指向C 语言字符串一个指针. const char *name = property_getName(pro); NSString *property = [[NSString alloc] initWithUTF8String:name]; NSLog(@"property:%@",property); [array addObject:property]; } return array; }