iOS 常用的字典轉模型框架:MJExtension
在常見的開發(fā)中會碰到一些問題巷燥。
常見的情況有:
- 模型嵌套模型數(shù)組;
- 屬性名沖突号枕,比如服務器返回 id缰揪、description;
- 同一個屬性名可能會對應多個服務器返回的 key葱淳;
- 模型嵌套模型時钝腺,內模型的屬性過少;
- 模型屬性和服務器 key 命名格式不同赞厕。
解決方案
- 指定屬性名和類名的轉換
+ (NSDictionary *)mj_objectClassInArray
// key : 屬性名
// value : 類名
- 指定屬性名和字典 key 的映射
+ (NSDictionary *)mj_replacedKeyFromPropertyName
// key : 屬性名
/* value: 字典中的 key */
/* 如果value 有多個則用數(shù)組存儲艳狐,從下標 0 開始優(yōu)先級降序 */
/* 如果內模型的屬性就只有一個,
則可以將其映射到本模型中皿桑,value 賦值方式同 keypath, 如果內模型中的屬性為數(shù)組則直接在keypath 中接字面量下標 */
- 屬性名處理
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
if([propertyName isEqualToString:@"ID"]) return @"id";
return [propertyName mj_underlineFromCamel];
}
- 屬性名處理 (駝峰 - -> 下劃線)
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
NSMutableString *key = [NSMutableString string];
for(NSUInteger I = 0; I < propertyName.length; I++){
unichar c = [propertyName characterAtIndex: I];
if(c >= 'A' && c <= 'Z'){
[key appendString:@"_"];
[key appendFormat:@"%c",c+32];
}else{
[key appendFormat:@"%c",c];
}
}
return key;
}
- 如果要做到無污染模型
[User mj_setupReplacedKeyFromPropertyName:^NSDictionary *(
return @{key : value};
)];
[User mj_setupObjectClassInArray:^NSDictionary *(
return @{key : value};
)];
- 當多個模型有同一個屬性且需要轉換時毫目,處理方法有:
- 每一個模型依次配;
- 將同一個屬性抽到父類诲侮;
- 直接配一個到根類镀虐,子類找不到會找向父類。