iOS开发学习iOS DeveloperiOS学习笔记

MJExtension关键字替换和驼峰法同时使用注意事项

2017-05-22  本文已影响56人  东东隆东抢

在之前的某个项目中,字典转模型时同时使用关键字替代方法和驼峰法,即:

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方法。可将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];
}

自此困扰很久的一个问题完美地得到解决!

上一篇 下一篇

猜你喜欢

热点阅读