在之前的某個(gè)項(xiàng)目中硕旗,字典轉(zhuǎn)模型時(shí)同時(shí)使用關(guān)鍵字替代方法和駝峰法华烟,即:
id關(guān)鍵字替代
+(NSDictionary*)mj_replacedKeyFromPropertyName{
return @{@"ID":@"id"};
}
駝峰法
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
return [propertyName mj_underlineFromCamel];
}
在使用過程中發(fā)現(xiàn)關(guān)鍵字替代方法無(wú)效坑鱼,即使用ID無(wú)法獲取解析數(shù)據(jù)智什,如下圖:
在gitHub上查看issue時(shí)發(fā)現(xiàn)也有很多人遇到這樣的問題动漾,也都在詢問解決方法和原因。后來又仔細(xì)翻看了Closed issue荠锭,發(fā)現(xiàn)里面有相關(guān)描述旱眯。
原因分析
mj_replacedKeyFromPropertyName121
方法優(yōu)先級(jí)比mj_underlineFromCamel
方法高,key在執(zhí)行mj_replacedKeyFromPropertyName121
方法的時(shí)候已經(jīng)經(jīng)過mj_underlineFromCamel
方法返回具體值证九,不會(huì)再執(zhí)行mj_replacedKeyFromPropertyName
方法删豺。可將mj_replacedKeyFromPropertyName
的內(nèi)容合并在mj_replacedKeyFromPropertyName121
方法里愧怜。
解決方案
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
//解決關(guān)鍵字沖突
if ([propertyName isEqualToString:@"ID"]) return @"id";
return [propertyName mj_underlineFromCamel];
}
或者在mj_replacedKeyFromPropertyName121
方法里對(duì)關(guān)鍵字不做處理呀页,即返回nil,然后再在mj_replacedKeyFromPropertyName
使用ID替換關(guān)鍵字id,不過個(gè)人覺得有點(diǎn)多此一舉叫搁,不如上述方法赔桌。
+(NSDictionary*)mj_replacedKeyFromPropertyName{
return @{@"ID":@"id"};
}
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
if ([propertyName isEqualToString:@"ID"]) return nil;//對(duì)關(guān)鍵字不作處理
return [propertyName mj_underlineFromCamel];
}
自此困擾很久的一個(gè)問題完美地得到解決!