字典和模型轉換的問題

iOS 常用的字典轉模型框架:MJExtension
在常見的開發中會碰到一些問題。

常見的情況有:

  1. 模型嵌套模型數組;
  2. 屬性名沖突,比如服務器返回 id、description;
  3. 同一個屬性名可能會對應多個服務器返回的 key;
  4. 模型嵌套模型時,內模型的屬性過少;
  5. 模型屬性和服務器 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};
)];
  • 當多個模型有同一個屬性且需要轉換時,處理方法有:
  1. 每一個模型依次配;
  2. 將同一個屬性抽到父類;
  3. 直接配一個到根類,子類找不到會找向父類。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容