3

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

在.h

FOUNDATION_EXPORT const int UNIT_IDLE;
FOUNDATION_EXPORT const int UNIT_DEFEND;

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

错误是“表达式不是整数常量表达式”

4

3 回答 3

5

在使用将在 switch 语句中使用的常量时,我​​通常将枚举与 typedef 语句一起使用。

例如,这将在 ProjectEnums.h 等共享 .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;
};

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

于 2012-06-27T21:52:16.533 回答
1

我认为您最好的选择是使用enum types. 只需在头文件中声明一个类型,然后您就可以在 switch 语句中使用它了。

类.h

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

类.m

eEditGameMode mode = kEditGameModeEdit;

switch (mode) {
    case kEditGameModeEdit:
        // ...
        break;
    case kEditGameModeNewGame:
        // ...
        break;

    default:
        break;
}

祝你好运!

于 2012-06-27T21:51:51.697 回答
0

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

于 2012-06-27T22:08:30.560 回答