问题描述
即使在目标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
}
}