0

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

つまり、ここで定数を作成する方法に関するアドバイスが表示されますhttp://stackoverflow.com/questions/538996/constants-in-objective-c ただし、このアプローチアプローチでは、グローバルでどこからでも参照できる定数が作成されるようです。

クラス名も使用してコンテキストを指定する必要があるという定数にもっと興味がありました。つまり、Eventオブジェクトがあるとすると、EventType定数を指定できます(例:EVENTTYPE_DIRECT)

  EventType.EVENTTYPE_DIRECT

したがって、問題は、*。hおよび*.mコードセグメントがこれに対してどのようになるかということです。

4

2 に答える 2

3

私と同じように、あなたは Java スタイルの言語のバックグラウンドを持っているように思えます (ここで間違っていたらごめんなさい)。私もこれについてしばらく疑問に思っていましたが、Appleが列挙型を定義し、それらを使用してあなたが説明しているような定数を定義する方法に気付きました。

Event例として架空のクラスを使用しましょう。

ヘッダー ファイルで、新しい列挙型を定義します。

typedef enum {

    kEventType_EventName1,
    kEventType_EventName2,
    kEventType_EventName3

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

etc は、EventName1必要なイベントの実際の名前に置き換えられます (つまり、kEventType_Direct.

これらのイベント タイプを確認する必要があるその他のクラスは、Event.h ファイルをインポートするだけで済みます。

#import "Event.h"

次にEventType、他の変数タイプと同じように使用できます (これは NSObject ではなく、保持、解放などできないことに注意してください。int、float などの他の C タイプと同様に扱います)。

それらのクラスが Event.h ヘッダーをインポートする限り、EventType 型の変数を他のクラスのメンバーとして持つこともできます。

しかし、これにより、次のようなことが可能になります。

-(void) handleEventOfType: (EventType) evtType {

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

        //etc...

    }
}

これは私がこれまでに見た中で最良の方法であり、海外では一般的に実践されている方法のようです (少なくとも私が見たほとんどのプロジェクトでは)。とにかく、それが役立つことを願っています!

于 2011-12-04T07:15:01.753 に答える
1

ここで何をしようとしているのかは明確ではありません-クラス内のプロパティの代わりに使用される「定数」ですか、それともClass1.CONSTANTはClass2.CONSTANTに異なる値を返すことになっていますか?

いずれにせよ、定数はここでは正しいアプローチではないようです。前者の場合は、不動産アクセサーを使用するだけです。これを変更する場合は、リファクタリングツールを使用すると簡単です。

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

このミックスに定数を追加することは不要であるように思われ、実際の利点なしに余分な依存関係(定数の維持)が導入されます。

于 2011-12-04T07:29:23.243 に答える