2011-12-04 8 views
0

クラスプロパティのように呼ばれるobjective-cで定数を作成する方法は何ですか? (例:classA.KEY_FOR_ITEM1)クラスプロパティのように呼ばれるobjective-cで定数を作成していますか? (例:classA.KEY_FOR_ITEM1)

これは、ここで定数を作成する方法を再考しています。http://stackoverflow.com/questions/538996/constants-in-objective-cこのアプローチのアプローチは、グローバルな定数を作成してどこでも参照できるようです。

私は、クラス名を使ってコンテキストを指定しなければならないという定数にもっと興味がありました。だから、そこで問題は、* .Hと* .Mコードセグメントは、この

答えて

3

サウンドのためになるものです

EventType.EVENTTYPE_DIRECT 

(例えばEVENTTYPE_DIRECT)あなたが指定したイベントタイプ定数を持つことができ、あなたはEventオブジェクトを持っていたと言いますあなたがJavaスタイルの言語の背景から来ているように私には(私がここで間違っていると思いますが)残念です。これについても私は不思議に思っていました。そして、Appleがenumをどのように定義しているかに注目し、記述したように定数を定義するために使用しました。

のは、一例として、架空のクラスEventを使用してみましょう:ヘッダーファイルで

、新しい列挙型を定義したい:EventName1など、実際の名前に置き換えられ

typedef enum { 

    kEventType_EventName1, 
    kEventType_EventName2, 
    kEventType_EventName3 

}EventType; //this is the name of the new type 

あなたが欲しいイベント(つまり、kEventType_Direct

これらのイベントタイプを見る必要がある他のクラスは、Event.hファイルをインポートするだけです:

EventType他の変数型と同じように使うことができます(NSObjectではないことを覚えておいて、保持、解放などはできません)。他のCタイプと同じように扱います:int 、floatなど)

イベントタイプの変数は、Event.hヘッダーをインポートする限り、他のクラスのメンバーとして持つこともできます。

しかし、それは、あなたがこのようなことを行うことができます:

-(void) handleEventOfType: (EventType) evtType { 

    switch(evtType) { 
     case kEventType_EventType1 : 
      //stuff here 
      break; 

     //etc... 

    } 
} 

私は今のところそれを行うに見た中で最高の方法だ、と一般的に海外で実施されている方法であると思われる(少なくともに私が見たプロジェクトのほとんど)。とにかく、助けてくれることを願います!

+0

ありがとうございます。私の例 "EventType.EVENTTYPE_DIRECT"のように、最初にクラスのコンテキストを指定する必要があると思います。しかし、代わりにあなたは最初にインポートを行う必要があるので、それは少なくともグローバルではないということに基づいて作業します...ああ、ああ、あなたはかなり前にJavaで汚染されているのですよね:) – Greg

+0

それ。私はClassName.EVENT_TYPEのようなものを手に入れたいと思っていましたが、いくつかのことを試しましたが、醜い実装には関わらないものは得られませんでした。 C++とObjective Cの場合、列挙型は行く方法です。 – Ian

1

あなたがここで何をしようとしているのかは不明です - クラスのプロパティの代わりに使用する "定数"か、Class2.CONSTANTに異なる値を返すClass1.CONSTANTですか?

どちらの方法でも定数が正しいアプローチではないようです。前者の場合は、単に実際のプロパティアクセサを使用します。これを変更する場合は、リファクタリングツールを使用して簡単に変更できます。

後者の場合、各クラスには、クラスに適した値を返す、必要な名前のクラスメソッドを持たせることができます。この場合も、リファクタリングツールが変更された場合は役立ちます。

このミックスに定数を追加することは不要と思われ、実際のメリットはありませんが、余分な依存性(定数の維持)が導入されています。

+0

@jturton - 後者のようなものですが、それぞれのためのメソッドを作成するのですが、もっと簡単な方法があれば疑問ですその目的がサポートしていれば、答えは「いいえ」であるかもしれません。私はちょうどEventクラスを適用する定数は、イベントクラスのコンテキストを使用する際に指定する必要があるという考えを持っていると思います(例えばEventType.EVENTTYPE_DIRECTなど)。それが可能なら私のコードにあることが望ましいでしょう。 – Greg

+0

メソッド名は、私が考えている方法です - これはコード補完の利点も与えます。他の答えに示唆されている列挙型も良いです。 – jrturton

関連する問題