在之前的某個項目中,字典轉模型時同時使用關鍵字替代方法和駝峰法,即:
id關鍵字替代
+(NSDictionary*)mj_replacedKeyFromPropertyName{
return @{@"ID":@"id"};
}
駝峰法
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
return [propertyName mj_underlineFromCamel];
}
在使用過程中發現關鍵字替代方法無效,即使用ID無法獲取解析數據,如下圖:
使用ID替換id關鍵字.png
在gitHub上查看issue時發現也有很多人遇到這樣的問題,也都在詢問解決方法和原因。后來又仔細翻看了Closed issue,發現里面有相關描述。
原因分析
mj_replacedKeyFromPropertyName121
方法優先級比mj_underlineFromCamel
方法高,key在執行mj_replacedKeyFromPropertyName121
方法的時候已經經過mj_underlineFromCamel
方法返回具體值,不會再執行mj_replacedKeyFromPropertyName
方法??蓪?code>mj_replacedKeyFromPropertyName的內容合并在mj_replacedKeyFromPropertyName121
方法里。
解決方案
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
//解決關鍵字沖突
if ([propertyName isEqualToString:@"ID"]) return @"id";
return [propertyName mj_underlineFromCamel];
}
或者在mj_replacedKeyFromPropertyName121
方法里對關鍵字不做處理,即返回nil,然后再在mj_replacedKeyFromPropertyName
使用ID替換關鍵字id,不過個人覺得有點多此一舉,不如上述方法。
+(NSDictionary*)mj_replacedKeyFromPropertyName{
return @{@"ID":@"id"};
}
+ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName{
if ([propertyName isEqualToString:@"ID"]) return nil;//對關鍵字不作處理
return [propertyName mj_underlineFromCamel];
}
自此困擾很久的一個問題完美地得到解決!