Class 无命名冲突的常量

Class constants without naming collision

我看到很多答案都是通过在 .h 文件中使用 extern int const Something 和在 .m 文件中使用 int const Something = 1 来定义常量。

但问题是 - 这些不是 class 常量,我不能将它们与 .符号或使用其他机制来区分拥有 class.

例如,

ClassA.h

extern int const SomeErrorCode;

ClassB.h

extern int const SomeErrorCode;

然后我 ClassC.m 我想同时使用 ClassA 和 ClassB 并检查它们的方法错误代码:

#import <ClassA.h>
#import <ClassB.h>

@implementation ClassC

-(void)doIt
{
     ClassA * objA = [[ClassA alloc] init];
     ClassB * objB = [[ClassB alloc] init];

     int resultA = [objA doSomething];
     // how do I check for resultA == ClassA.SomeErrorCode ?

     int resultB = [objB doSomething];
     // how do I check for resultB == ClassB.SomeErrorCode ?
}

@end

如果 class 和 ClassB.SomeErrorCode 具有不同的值,我如何确保我可以同时使用它们并且不会与 ClassA.SomeErrorCode 发生冲突?

如果您不需要在定义它们的文件外部引用常量,则不要在您的 .h 文件中声明它们。如果没有这些声明,它们将不会被链接器看到,并且不会有名称冲突。

如果您确实需要常量在其他模块中可见,则需要为它们创建全局唯一的名称。