【问题标题】:Is it redundant to check isKindOfClass in Objective C?在Objective C中检查isKindOfClass是否多余?
【发布时间】:2020-12-18 16:25:07
【问题描述】:

检查 isKindOfClass 是否是多余的,即使是 Objective C 中的非 id 变量?

队友编写了 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
    }
}

【问题讨论】:

  • 代码审查条目被删除。请取消投票。 @罗马
  • “即使对于非 id 变量”?为什么 ?你知道NSString *foodInfoId = [update objectForKey:FOOD_INFO_ID];,没有什么可以证实fooldInfoId真的是一个NSString对象,对吧?因此,检查课程可能是相关的。这真的取决于你的情况。

标签: ios objective-c nsstring


【解决方案1】:

我认为您应该使用为 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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 2011-10-09
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多