MJExtension關鍵字替換和駝峰法同時使用注意事項

在之前的某個項目中,字典轉模型時同時使用關鍵字替代方法和駝峰法,即:

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];
}

自此困擾很久的一個問題完美地得到解決!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容