2017-01-23 107 views
0

我见过很多答案,只是在.m文件使用.h文件中extern int const Somethingint const Something = 1来定义常量。类常量没有命名冲突

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

例如,

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 

如何确保我可以使用这两个类,并且在ClassA.SomeErrorCode和ClassB.SomeErrorCode没有冲突的情况下它们具有不同的值?

+4

当我使用'extern',我使用前缀(比如当我创建类做),并给予他们的名字链接到它们被定义的类,并使用“K”,如果是常量,而不是如他们是静态的。像'extern int const kAFMyClassAErrorCode' – Larme

+2

你有没有想过为什么它们是常量名为'UITextFieldTextDidChangeNotification'而不是'TextDidChange'? – Sulthan

+0

是的,这让我觉得“yack,Objective-C很混乱”。如果没有其他清洁选项,我想我必须习惯它。 – JustAMartin

回答

1

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

如果你确实需要的常量,可以在其他模块可见,你需要弥补他们是全球唯一的名称。