2012-02-10 9 views
8

私は、typosを防ぐためにNSDictionaryのあなたの名前の定数を使用することを理解しています(myNameは自動的に@ "myName"を補完しません)。NSDictionaryを扱うときに定数を使用しますか?

私は現在、中規模の辞書で数回働いています。私はキー名を間違って入力してしまいました。

私は疑問に思っていますが、定数命名方式を設定する価値はあると思いますか?

+2

はい、あなたがそれら多く使用している場合。また、リファクタリング(エラー、キー名の変更)を容易にします。 – Costique

答えて

21

はいのようなあなたの値にアクセスすることができますが、私はの#defineではなく、適切な文字列定数を定義するお勧めします文字列定数は型安全であり、すべての参照で同じ実際の文字列オブジェクトが使用されるため、isEqualToString:を使用してそれらを比較するパフォーマンスが向上します。それは公開するために

static NSString *const MyConstant = @"MyConstant"; 

、あなたの代わりにあなたの.hファイルでこれを置くことができるか、あなたが定義を分割することができます:あなたはあなたの.mファイルでこれを置くことができ、一定のプライベート文字列を定義するには

extern NSString *const MyConstant; 

そして、これを自分の.mファイルに:あなたの.hでこれを置くことによって

NSString *const MyConstant = @"MyConstant"; 
+3

+1非常に良い答えと完全に行く方法 - うまくいけば、これは常にそれらのものの定義を使用しているいくつかの私の同僚によって読まれるでしょう。雷と雷がトイレでそれらを打つでしょう! – Till

3

はい、それだけの価値があります。 このようなもので一貫性があるということは、エラーを削減して時間を節約します。

4

私は通常、GlobalDefinitions.hファイルを作成し、マジック文字列の代わりにコードで使用できるマクロを配置します。

.hファイルを含むことにより、.hファイル

#define PERSON_NAME @"Person_name" 
#define PERSON_BDAY @"Person_bday" 

今はそう

[dictionary objectForKey:PERSON_NAME]; 
+1

定数文字列は#defされた文字列よりも優れていることに注意してください。参照してくださいhttp://stackoverflow.com/questions/538996/constants-in-objective-c –

+0

合意 - 文字列定数を定義する方法については、私の答えを参照してください。 –

+0

私はニックの答えに同意します。 –

関連する問題