Objective C具有case / switch的全局常量

有什么办法可以在Objective C中使用全局int常量在case / switch语句中工作吗? 这里的技术(http://stackoverflow.com/questions/538996/constants-in-objective-c)让我访问常量,但不让我把它们放到switch语句中。

在.h

FOUNDATION_EXPORT const int UNIT_IDLE; FOUNDATION_EXPORT const int UNIT_DEFEND; 

以.m

 int const UNIT_IDLE = 0; int const UNIT_DEFEND = 1; 

错误是“expression式不是整数常量expression式”

我通常使用枚举与typedef语句使用常量,我将在switch语句中使用。

例如,这将在一个共享的.h文件,如ProjectEnums.h:

 enum my_custom_unit { MyCustomUnitIdle = 1, MyCustomUnitDefend = 2 }; typedef enum my_custom_unit MyCustomUnit; 

然后,我可以在我的.c,.m,.cpp文件中使用类似于以下switch语句的代码:

 #import "ProjectEnums.h" - (void) useUnit:(MyCustomUnit)unit { switch(unit) { case MyCustomUnitIdle: /* do something */ break; case MyCustomUnitDefend: /* do something else */ break; default: /* do some default thing for unknown unit */ break; }; return; }; 

这也允许编译器在编译时validation传递给方法的数据并在switch语句中使用。

我认为你最好的select是使用enum types 。 只要在头文件中声明一个types,然后就可以在switch语句中使用它了。

class.h

 typedef enum{ kEditGameModeNewGame = 0, kEditGameModeEdit = 1 }eEditGameMode; 

class.m

 eEditGameMode mode = kEditGameModeEdit; switch (mode) { case kEditGameModeEdit: // ... break; case kEditGameModeNewGame: // ... break; default: break; } 

祝你好运!

官方指南说,你应该使用“枚举的相关常量具有整数值组”。 这可能会解决您的问题,并改善代码。