辞書とモデル変換の問題
1797 ワード
iOSでよく使われる辞書回転モデルフレームワーク:MJExtensionはよくある開発でいくつかの問題に直面します.
よくあることは次のとおりです.モデルネストモデル配列; プロパティ名の競合、例えばサーバがid、descriptionを返す. 同じ属性名は、複数のサーバが返すkeyに対応する可能性がある. モデルがモデルをネストする場合、内部モデルの属性が少なすぎる. モデルのプロパティとサーバkeyのネーミングフォーマットは異なります.
ソリューション属性名とクラス名の変換を指定する 属性名と辞書keyのマッピング を指定する属性名処理 属性名処理(アルパカ-->下線) 無汚染モデル を実現するには複数のモデルが同一の属性を有し、変換を必要とする場合、処理方法は、 である.各モデルは順次配置される. 同じ属性を親に抽出します. はルートクラスに直接割り当てられ、サブクラスが見つからないと親クラスに検索されます.
よくあることは次のとおりです.
ソリューション
+ (NSDictionary *)mj_objectClassInArray
// key :
// value :
+ (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};
)];