我为按钮 ID 预定义了枚举:
typedef enum
{
button1ID = 407,
button2ID = 999,
button3ID = 408,
button4ID = 409,
} TOP_MENU_BUTTON_TYPE;
我需要确定我收到的 ID 是否在枚举中被定义。我怎样才能做到这一点?就像是:
if(id in TOP_MENU_BUTTON_TYPE)
我为按钮 ID 预定义了枚举:
typedef enum
{
button1ID = 407,
button2ID = 999,
button3ID = 408,
button4ID = 409,
} TOP_MENU_BUTTON_TYPE;
我需要确定我收到的 ID 是否在枚举中被定义。我怎样才能做到这一点?就像是:
if(id in TOP_MENU_BUTTON_TYPE)
没有办法动态迭代枚举。枚举是静态功能,它们在运行时不存在。在运行时,它们只是普通的整数(一定大小)和值。
您在赏金中陈述的这个要求是不可能的:
在您的回答中,不要使用枚举的硬编码值,只使用它的类型。
其他答案向您展示了几乎所有静态方法。
你可以简单地这样做:
int validValue = button1ID | button2ID | button3ID | button4ID;
if (validValue & id)
// Valid enum value
如果我清楚地理解您的问题,那么这将对您有所帮助..
而不是enum
单独使用,您应该尝试使用struct
它,@Richard 的答案将帮助您如何做到这一点。
https://stackoverflow.com/a/10305425/1083859
在上面的链接中,他解释了如何使用动态enum
值,struct
您也可以iterate
找出这些值。我想你会有一个想法。
Anenum
不是对象,它只是编译器在构建时理解的整数。因此,您需要提供低级代码来进行检查。
如果您没有预先定义枚举的值,它们将从 0 开始并增加 1。这使您可以比较一个值以查看它是否是 <= 您的最后一个元素。
试试这个方法:
-(BOOL)isDefined:(TOP_MENU_BUTTON_TYPE)type{
BOOL isDefined;
switch (type) {
case button1ID:
case button2ID:
case button3ID:
case button4ID:
isDefined = TRUE;
break;
default:
isDefined = FALSE;
break;
}
return isDefined;
}
//(...)
TOP_MENU_BUTTON_TYPE test;
test = 407;
NSLog(@"is %d a TOP_MENU_BUTTON_TYPE? result: %d", test, [self isDefined:test]);
test = 2;
NSLog(@"is %d a TOP_MENU_BUTTON_TYPE? result: %d", test, [self isDefined:test]);
所以:
if ([self isDefined:test]){
// OK, test is defined in TOP_MENU_BUTTON_TYPE
}
在.h
typedef enum
{
407,
999,
408,
409,
} TOP_MENU_BUTTON_TYPE;
@interface CheckoutController : UIViewController{
TOP_MENU_BUTTON_TYPE type;
}
在.m
switch (status) {
case 407:
//Your Task
break;
case 999:
//Your Task
break;
case 408:
//Your Task
break;
case 409:
//Your Task
break;
}
switch
关于 using或一堆||
in的答案if
是正确的,但是……</p>
如果你有很大的枚举(有很多值的枚举),你可以让它更简单。Cocoa 也使用了这个技巧。
您的枚举值必须增加一。
然后向枚举添加两个附加值:
typedef enum {
buttonIDMin = 407, // Lowest value
button1ID = 407,
button2ID = 408, // Incremented by ONE
button3ID = 409,
button4ID = 410,
buttonIDMax = 410, // Highest value
} TOP_MENU_BUTTON_TYPE;
当您进行比较时,您只需要执行以下操作:
if (buttonID >= buttonIDMin && buttonID <= buttonIDMax) ...