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;

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


当我使用常量时,我​​通常在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;
};

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


我认为你最好的选择是使用enum 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;
}

祝你好运!


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

链接地址: http://www.djcxy.com/p/84437.html

上一篇: Objective C global constants with case/switch

下一篇: switch case statement error: case expressions must be constant expression