Objective c 计算int是否与定义的枚举类型匹配

Objective c 计算int是否与定义的枚举类型匹配,objective-c,enums,Objective C,Enums,我有一个包含多个类型定义的enum typedef,例如: ActionTypeSomething = 1, ActionTypeSomethingElse = 2 等等 因此,我编写的方法对传递的int求值,然后相应地返回一个值(例如字符串) (NSString *)evaluatAndReturnProperResult:(int)typeID NSString *repsonseString; switch (typeID) case actionTypeSomething

我有一个包含多个类型定义的enum typedef,例如:

ActionTypeSomething = 1,
ActionTypeSomethingElse = 2
等等

因此,我编写的方法对传递的int求值,然后相应地返回一个值(例如字符串)

(NSString *)evaluatAndReturnProperResult:(int)typeID

NSString *repsonseString;

switch (typeID) 
    case actionTypeSomething: {
        responseString = @"an appropriate string for typeID"
    }
...

return responseString;
因此,我的开关计算每个支持的类型并返回正确的字符串

现在回答我的问题:

我只想返回支持类型的字符串(即,理论上可以传递任何整数)。如果没有对手,我就归零

显然,我可以完全使用我已有的方法来实现这一点。但我(理论上)是否可以在通过开关发送之前,通过评估传递的int来查看它是否匹配我定义的任何枚举类型来提高性能(开关不是很大,但如果我知道不匹配,我还是宁愿在方法的开头返回nil)


我确信这很容易,在我进入开关之前,有人能建议如何评估我传递的整数是否与任何define enum ActionType匹配吗?在这种情况下,我可能过早地进行了优化,但这更像是一个关于如何实现它的一般性问题(如果我应该的话就不是了)。

方法的参数不应该是int,理想情况下应该是您定义的枚举。这为您提供了一些编译时检查


如果这是不可能的,那么您在交换机中的默认情况将处理得很好-这就是它们的设计目的

方法的参数不应该是int,理想情况下应该是您定义的枚举。这为您提供了一些编译时检查


如果这是不可能的,那么您在交换机中的默认情况将处理得很好-这就是它们的设计目的

您使用的TypeDef将ActionEnum限制为一组值,因此除了上行或下行通信之外,您不应该在程序中使用int。有些人甚至会说,您应该接收一个字符串并将其映射到枚举,反之亦然

在获取字符串方面,通常的优化是 具有从ActionType1到ActionTypeN的字符串数组。 使用枚举作为索引从数组中查找它

数组还将为您提供将字符串映射到枚举的操作


一个简单的if语句将enum转换为一个整数,与数组的边界相对应,可以让您优雅地处理一个坏值,但对我来说,这会引发一个巨大的异常。

您使用的是一个TypeDef,它将ActionEnum限制为一组值,因此,除了上行或下行通信之外,您不应该在程序中使用int。有些人甚至会说,您应该接收一个字符串并将其映射到枚举,反之亦然

在获取字符串方面,通常的优化是 具有从ActionType1到ActionTypeN的字符串数组。 使用枚举作为索引从数组中查找它

数组还将为您提供将字符串映射到枚举的操作


一个简单的if语句将枚举强制转换为一个整数,与数组的边界相对应,可以让您优雅地处理一个坏值,但对我来说,这会引发一个大的异常。

您可以定义另外两个枚举值:

typedef enum {
    ActionTypeMin = 1,
    ActionTypeSomething = 1,
    ActionTypeSomethingElse = 2,
    ActionTypeMax = 2
} ActionType;
然后检查:

typeID >= ActionTypeMin && typeID <= ActionTypeMax

typeID>=ActionTypeMin&&typeID您可以再定义两个枚举值:

typedef enum {
    ActionTypeMin = 1,
    ActionTypeSomething = 1,
    ActionTypeSomethingElse = 2,
    ActionTypeMax = 2
} ActionType;
然后检查:

typeID >= ActionTypeMin && typeID <= ActionTypeMax

typeID>=ActionTypeMin&&typeID理想情况下是的-但在本例中,我的方法是进行验证。web服务使用一个实体数组进行回调,每个实体都有一个int-typeID。我的UI应该评估哪些实体将显示在UI中,这些实体应该只与我的枚举类型匹配。如果匹配,则返回一个字符串以显示从actionType派生的实体。如果我返回nil,ui调用方将知道不在表行中包含该项。我只是想知道,人们是否可以在不通过开关的情况下对其进行评估。谢谢。那么我回答的第二部分对你有用。开关是经过超级优化的。确实如此,谢谢。只是出于好奇想知道是否还有别的办法,但似乎没有。好在我已经让它这样工作了!理想情况下是的,但在这种情况下,我的方法是进行验证。web服务使用一个实体数组进行回调,每个实体都有一个int-typeID。我的UI应该评估哪些实体将显示在UI中,这些实体应该只与我的枚举类型匹配。如果匹配,则返回一个字符串以显示从actionType派生的实体。如果我返回nil,ui调用方将知道不在表行中包含该项。我只是想知道,人们是否可以在不通过开关的情况下对其进行评估。谢谢。那么我回答的第二部分对你有用。开关是经过超级优化的。确实如此,谢谢。只是出于好奇想知道是否还有别的办法,但似乎没有。好在我已经让它这样工作了!我并没有试图限制它们,而是让我的UI挑选要在UI中显示哪些actionItems(是的,它是一个web服务,为我提供了定义了INT类型的动作实体)。因为我处理的int值远比我关心的要多,一个包含所有int值的数组可能比我需要的多得多,但是一个只键入我感兴趣的类型的字典也是按照同样的思路,我可能会试一试。谢谢我并没有试图限制它们,而是让我的UI挑选要在UI中显示哪些actionItems(是的,它是一个web服务,为我提供了定义了INT类型的动作实体)。因为我处理的int值远比我关心的要多,一个包含所有int值的数组可能比我需要的多得多,但是一个只键入我感兴趣的类型的字典也是按照同样的思路,我可能会试一试。谢谢