2017-01-23 12 views
0

.h 파일에 extern int const Something, .m 파일에 int const Something = 1을 사용하여 상수를 정의하는 방법에 대한 답을 많이 보았습니다.명명 충돌이없는 클래스 상수

하지만 문제는 - 클래스 상수가 아니며이를 사용할 수 없다는 것입니다. 표기법을 사용하거나 다른 메커니즘을 사용하여 소유 클래스를 구별합니다. 예를 들어

,

ClassA.h

extern int const SomeErrorCode; 

ClassB.h

extern int const SomeErrorCode; 

다음 나는를 ClassA와 ClassB가 모두 사용하고 확인하려면 어디 ClassC.m이 자신의 메소드 오류 코드 :

#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'을 사용하면 접두사 (예 : 클래스를 만들 때와 같이)를 사용하고 정의 된 클래스에 연결하는 이름을 지정하고 const 일 경우 "k"를 사용합니다. 그들은 정적이다. 'extern int const kAFMyClassAErrorCode'와 마찬가지로 – Larme

+2

왜 그들이'TextDidChange'가 아니라'UITextFieldTextDidChangeNotification'라는 이름의 상수인지 궁금합니까? – Sulthan

+0

예, 그러면 "yack, Objective-C는 지저분 해"라고 생각하게되었습니다. 나는 다른 청소기 옵션이 없다면 그때 익숙해 져야 할 것 같아요. – JustAMartin

답변

1

정의 된 파일 외부에서 상수를 참조 할 필요가없는 경우 .h 파일에서 상수를 선언하지 마십시오. 이러한 선언이 없으면 링커에서 볼 수 없으며 이름 충돌이 발생하지 않습니다.

다른 모듈에서 상수를 볼 수있게하려면 전역 적으로 고유 한 이름을 만들어야합니다.