objective-c - 带 case/switch 的 Objective C 全局常量

标签 objective-c ios constants switch-statement

有什么方法可以在 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;

.m

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

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

最佳答案

在使用将在 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 语句中使用的数据。

关于objective-c - 带 case/switch 的 Objective C 全局常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11235174/

相关文章:

c++ - (&const_object) 可以评估为临时地址

ios - 使用 Swift 2 的 HJImagesToVideo

objective-c - UIWebView 尖角

购买订阅后 iOS 应用程序在启动时崩溃,但只有在发布到 AppStore 时,TestFlight 才能正常工作

c - 添加 const 的正确方法是什么?

java - 在 Java 中 : do expressions involving constants defined at instantiation get simplified during compile-time?

objective-c - 关于使用 AVMutableComposition 来合成剪辑,

objective-c - 如何在 Mac OS 10.6+ 中使用 obj-c 切换到登录窗口

ios - 如何在多台计算机上处​​理 Xcode 项目?

ios - ChildViewController -> ParentViewController -> SecondChildViewController 使用 ContainerView