辞書とモデル変換の問題

1797 ワード

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};
    )];
    
  • 複数のモデルが同一の属性を有し、変換を必要とする場合、処理方法は、
  • である.
  • 各モデルは順次配置される.
  • 同じ属性を親に抽出します.
  • はルートクラスに直接割り当てられ、サブクラスが見つからないと親クラスに検索されます.