2017-01-23 8 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

はい、これは私に "やって、Objective-Cは面倒です"と思いました。私は他のクリーナーオプションがないなら、それに慣れなければならないと思う。 – JustAMartin

答えて

1

定義されているファイルの外で定数を参照する必要がない場合は、それらのファイルを.hファイルで宣言しないでください。これらの宣言がなければ、リンカーには見られず、名前の衝突もありません。

他のモジュールで定数を表示する必要がある場合は、それらの名前をグローバルに一意にする必要があります。