如何识别int代码值所属的枚举中的哪个常量

时间:2014-09-19 09:19:33

标签: c++ ios objective-c ios7 enums

更新1

+(PKMainWeatherType)getWeatherTypeWithWeatherId:(NSUInteger)weatherId{

    if(weatherId >= PKMainWeatherTypeAdditional) return PKMainWeatherTypeAdditional;
    if(weatherId >= PKMainWeatherTypeExtreme) return PKMainWeatherTypeExtreme;
    if(weatherId >= PKMainWeatherTypeClouds) return PKMainWeatherTypeClouds;
    if(weatherId >= PKMainWeatherTypeAtmosphere) return PKMainWeatherTypeAtmosphere;
    if(weatherId >= PKMainWeatherTypeSnow) return PKMainWeatherTypeSnow;
    if(weatherId >= PKMainWeatherTypeRain) return PKMainWeatherTypeRain;
    if(weatherId >= PKMainWeatherTypeDrizzle) return PKMainWeatherTypeDrizzle;
    if(weatherId >= PKMainWeatherTypeThunderstorm) return PKMainWeatherTypeThunderstorm;
    return PKMainWeatherTypeNone;
}

这是获得适当常数的最佳方法吗?


原帖

给出以下枚举

typedef NS_ENUM(NSUInteger, PKMainWeatherType)
{
    PKMainWeatherTypeNotFound = 0,
    PKMainWeatherTypeThunderstorm = 200,
    PKMainWeatherTypeDrizzle = 300,
    PKMainWeatherTypeRain = 500,
    PKMainWeatherTypeSnow = 600,
    PKMainWeatherTypeAtmosphere = 700,
    PKMainWeatherTypeClouds = 800,
    PKMainWeatherTypeExtreme = 900,
    PKMainWeatherTypeAdditional = 951,
};

如何识别代码编号224所属的常量?在这种情况下,它将属于PKMainWeatherTypeThunderstorm

在这种情况下,我希望所有属于该范围的数字与其常量相关联。 查看this link以查看代码值及其关联。

我在考虑flooring的int代码值,但是这会产生最后一个常量的问题,因为最后两个常量共享相同的900域,因此地板会导致951以上的所有代码值被归类为之前的常数的值为900。

任何人都可以提供干净的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果PKMainWeatherTypeAdditional是唯一一个不遵循该模式的人,您只需要处理该特定情况,然后计算其余情况。

严格按照提供的链接提供的代码:

+ (PKMainWeatherType)getWeatherTypeWithWeatherId:(NSUInteger)weatherId {

    if (weatherId >= PKMainWeatherTypeAdditional) return PKMainWeatherTypeAdditional;

    return (PKMainWeatherType)(weatherId / 100 * 100);
}