Objective C全局常量与case/switch语句

3
有没有办法在Objective C中使用全局int常量,并在case/switch语句中起作用?这里的技巧(https://dev59.com/tXRB5IYBdhLWcg3wuZQ1
在.h文件中:
FOUNDATION_EXPORT const int UNIT_IDLE;
FOUNDATION_EXPORT const int UNIT_DEFEND;

in .m

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

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

你的 switch 是什么样子的? - pb2q
可能是重复的问题:整数常量不会缩小为整数 - zpasternack
我看到了那个解决方案,但我很新,所以可能只是不理解,但我不知道如何在Object2中访问Object1中的枚举。 - Andrew
请使用 const static - Albert Renshaw
3个回答

5

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

例如,在一个共享的.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语句中使用的数据。


我有点迟钝,但是从另一个对象中,我可以访问枚举my_custom_unit吗?还是我必须复制粘贴枚举?我想要共享常量。 - Andrew
@Andrew 你可以在一个共享的头文件中声明枚举。通常我会创建一个名为ProjectEnumerations.h的文件,这个文件会被使用这些枚举的所有源文件包含进来。我已经更新了我的示例来演示。 - David M. Syzdek
非常感谢!我之前一直不知道如何共享枚举,现在终于找到了最后一块拼图。 - Andrew

1

我认为你最好的选择是使用枚举类型。只需在头文件中声明一个类型,然后就可以在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;
}

祝你好运!


有没有办法在不同的对象之间共享枚举?谢谢! - Andrew

0

官方指南建议您使用“枚举”来表示一组相关的整数常量。这可能会解决您的问题并改善代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接