iOS 常用的字典转模型框架:MJExtension
在常见的开发中会碰到一些问题。
常见的情况有:
- 模型嵌套模型数组;
- 属性名冲突,比如服务器返回 id、description;
- 同一个属性名可能会对应多个服务器返回的 key;
- 模型嵌套模型时,内模型的属性过少;
- 模型属性和服务器 key 命名格式不同。
解决方案
- 指定属性名和类名的转换
+ (NSDictionary *)mj_objectClassInArray
// key : 属性名
// value : 类名
- 指定属性名和字典 key 的映射
+ (NSDictionary *)mj_replacedKeyFromPropertyName
// key : 属性名
/* value: 字典中的 key */
/* 如果value 有多个则用数组存储,从下标 0 开始优先级降序 */
/* 如果内模型的属性就只有一个,
则可以将其映射到本模型中,value 赋值方式同 keypath, 如果内模型中的属性为数组则直接在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};
)];
- 当多个模型有同一个属性且需要转换时,处理方法有:
- 每一个模型依次配;
- 将同一个属性抽到父类;
- 直接配一个到根类,子类找不到会找向父类。