- 需求驱动开发
- 模型中实现字典转模型 --> 获取模型的属性 (运行时方法)
1.获取属性列表
2.取出objc_property_t数组中的property
3.获取的是C语言的名称
4.将C语言的字符串转成OC的
5.添加到属性数组中
- 注意点:
1.使用类方法
2.C语言中,用完copy,create的东西之后,最好释放
+ (NSArray *)properties{
unsigned int count;
/*
1.获取属性列表
参数1:获取哪个类的
参数2:count表示你该类里面有多少个属性
propertyList 它就相当于一个数组
数组里面就装着 .h 文件中的 @property (nonatomic, copy) NSString *title;,@property (nonatomic, copy) NSString *digest;...
*/
objc_property_t *propertyList = class_copyPropertyList([self class], &count);
//定义OC的属性数组
NSMutableArray *ocProperties = [NSMutableArray array];
for (int i=0; i<count; i++) {
//2.取出objc_property_t数组中的property
objc_property_t property = propertyList[i];
//3.获取的是C语言的名称
const char *cPropertyName = property_getName(property);
//4.将C语言的字符串转成OC的
NSString *ocPropertyName = [[NSString alloc] initWithCString:cPropertyName encoding:NSUTF8StringEncoding];
//5.添加到属性数组中
[ocProperties addObject:ocPropertyName];
}
//5.C语言中,用完copy,create的东西之后,最好释放
free(propertyList);
return ocProperties.copy;
}
- 转模型的方法
+ (instancetype)newsWithDict:(NSDictionary *)dict{
id obj = [[self alloc] init];
NSArray *properties = [self properties];
for (NSString *property in properties) {
if (dict[property]!=nil) {
//KVC赋值
[obj setValue:dict[property] forKey:property];
}
}
return obj;
}
- 小结:
有了这两个方法就可以轻松的把后台返回的接口数据转化了,相比用第三方,自己来写也并不费力~~第三方优点是对层次结构比较深的转字典转模型也好用.
网友评论