在目标C中检查isKindOfClass是否多余?

问题描述

即使在目标C中检查非id变量,是否也需要检查isKindOfClass吗?

团队成员编写了Swift代码。我正在审查。我真的需要检查条件中的isKindOfClass还是多余?

-(void) checkCalorie:(NSMutableDictionary *) update {

    Nsstring *foodInfoId = [update objectForKey:FOOD_INFO_ID];
    double calorie = [[update objectForKey:CALORIE] doubleValue];
    if ([foodInfoId isKindOfClass:[Nsstring class]] && calorie < 0)
    {
        calorie = 0.0;
        // some logic
    }
}

解决方法

我认为您应该使用为Objective-C实现的dynamic_cast重构此代码。您可以检查this question以获得灵感。例如,使用this answer中的objc_dynamic_cast,那么您将获得以下代码:

-(void)checkCalorie:(NSMutableDictionary *)update {
    NSString *foodInfoId = objc_dynamic_cast([update objectForKey:FOOD_INFO_ID],NSString);
    double calorie = [[update objectForKey:CALORIE] doubleValue];
    if (foodInfoId != nil && calorie < 0) {
        calorie = 0.0;
        // some logic
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...