全局常量文件中的Objective-C typedef枚举

rto*_*ars 7 constants objective-c precompiled-headers

好的,这与问题"目标C中的常量"有关.

我创建了Constants.h及其相应的Constants.m文件:

// Constants.h
extern int const BOOKS; 
typedef enum SSDifficultyLevel {
    EASY = 0,
    MEDIUM = 1,
    HARD = 2
} SSDifficultyLevel;

// Constants.m
int const BOOKS = 66;
Run Code Online (Sandbox Code Playgroud)

我的问题:在Constants.h中enum可以做到这一点吗?代码正在编译好(到目前为止没有警告或错误),但我想知道这是否是正确的方法,因为相关问题中提供的解决方案涉及拆分常量的定义和声明.typedef

谢谢.

jus*_*tin 4

好吧,常量和枚举有不同的用途(尽管有一些明显的重叠)。所以,不要离人们的期望太远,除非你有充分的理由打破这条规则。

就我个人而言,我不太喜欢“全局常量标头”,因为您通常应该将这些声明与它们的使用对象相关联。例如,Apple 的框架通常在它们相关的接口附近声明枚举,并在与类相同的标头中声明通知名称。

除此之外,你已经正确地声明了事情。

如果您使用 c++ 或 objc++,那么您将需要修复该问题,extern因为名称可能不同,这可能会导致链接错误。

像这样的事情应该可以解决问题:

#if defined(__cplusplus)
#define MONExternC extern "C"
#else
#define MONExternC extern
#endif
Run Code Online (Sandbox Code Playgroud)

那么你会BOOKS这样声明:

MONExternC int const BOOKS; 
Run Code Online (Sandbox Code Playgroud)

另请注意,这可能只是为了在您的示例中进行说明:这些标识符非常短,并且很容易导致与其他标识符发生冲突。