- 需求驅(qū)動(dòng)開(kāi)發(fā)
- 模型中實(shí)現(xiàn)字典轉(zhuǎn)模型 --> 獲取模型的屬性 (運(yùn)行時(shí)方法)
1.獲取屬性列表
2.取出objc_property_t數(shù)組中的property
3.獲取的是C語(yǔ)言的名稱
4.將C語(yǔ)言的字符串轉(zhuǎn)成OC的
5.添加到屬性數(shù)組中
- 注意點(diǎn):
1.使用類方法
2.C語(yǔ)言中,用完copy,create的東西之后,最好釋放
+ (NSArray *)properties{
unsigned int count;
/*
1.獲取屬性列表
參數(shù)1:獲取哪個(gè)類的
參數(shù)2:count表示你該類里面有多少個(gè)屬性
propertyList 它就相當(dāng)于一個(gè)數(shù)組
數(shù)組里面就裝著 .h 文件中的 @property (nonatomic, copy) NSString *title;,@property (nonatomic, copy) NSString *digest;...
*/
objc_property_t *propertyList = class_copyPropertyList([self class], &count);
//定義OC的屬性數(shù)組
NSMutableArray *ocProperties = [NSMutableArray array];
for (int i=0; i<count; i++) {
//2.取出objc_property_t數(shù)組中的property
objc_property_t property = propertyList[i];
//3.獲取的是C語(yǔ)言的名稱
const char *cPropertyName = property_getName(property);
//4.將C語(yǔ)言的字符串轉(zhuǎn)成OC的
NSString *ocPropertyName = [[NSString alloc] initWithCString:cPropertyName encoding:NSUTF8StringEncoding];
//5.添加到屬性數(shù)組中
[ocProperties addObject:ocPropertyName];
}
//5.C語(yǔ)言中,用完copy,create的東西之后,最好釋放
free(propertyList);
return ocProperties.copy;
}
- 轉(zhuǎn)模型的方法
+ (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;
}
- 小結(jié):
有了這兩個(gè)方法就可以輕松的把后臺(tái)返回的接口數(shù)據(jù)轉(zhuǎn)化了,相比用第三方,自己來(lái)寫也并不費(fèi)力~~第三方優(yōu)點(diǎn)是對(duì)層次結(jié)構(gòu)比較深的轉(zhuǎn)字典轉(zhuǎn)模型也好用.