Obj-Cの新機能ですので、これが愚かな質問であれば私を許してください:Objective-CのJava-enumスタイルのクラス?
Javas列挙型のスタイルでいくつかを実装するにはどうすればよいですか?より正確にするには:
コンパイル時に修正され、インスタンスごとに一意の既知のプロパティを持つクラスが必要です。また、私は1つのインスタンスの種類が欲しい。
は私がJavaでの例を挙げてみましょう:
public enum MessageTypes {
DEFAULT("white", "standard", 1),
EXPRESS("red", "expressMessage", 2),
BORADCAST("green", "broadcast", 3);
String color; String tagName; int dbId;
MessageTypes(String color, String tagName, int dbId) {
// you get the idea
}
//some methonds like getEnumByTagName
}
あなたはObjective-Cでこのような何かをだろうか?何か不足していますか?これはまったく悪いパターンですか?
ありがとうございます!
編集:私は自分自身を明確にしなかった場合、申し訳ありません。私は、obj-c列挙型は私が探しているものではないことを知っています(int型のtypedef以上のわずかなものです)。
特定のクラスの(kind-of-singleton、immutable)インスタンスを作成したいと思います。 Apples Dev-Docsのシングルトンパターンは、プロパティの個々の値を持つクラスの複数の別個のインスタンスが必要なので使いません。
これは、メッセージにプロパティとして割り当てることができる複数のメッセージタイプ(約20個)を持つことです。私のメッセージタイプはそれぞれ、(修正され定義された)色、属性値(XML表現)、数値IDを持っています。
Javaでは、私のコードサンプルのようにenumを使用します。しかし、どのようにして異なるMessageTypeを作成し、それらをObj-Cのプロパティに関連付けるのですか?
MessageTypeのサブクラス(それぞれプロパティを保持するシングルトンインスタンスを持つ)を作成することは、このような単純なタスクとトータルオーバーキルのための多くの作業のようです。
私の現在のアプローチは、異なるインスタンスを保持するNSArrayを持つクラスを作成することです。 +(id)messageTypeForId:NSInteger id_
のようなメソッドへの最初のアクセスでは、NSArrayは事前計算されています。しかし、これはまったく不器用で、まったくエレガントではないと感じています。
もっと満足のいくアプローチはありますか?次に、あなただけの他のデータ型あなたと同じようにそれを使用
typedef enum { MT_WHITE, MT_RED, MT_GREEN } MessageType;
:
マクロは私の視点ではもっと醜いですが、私はあなたの最初の解決策が本当に好きです。それは私のアプローチよりも優れているようです(もっとココア風です)。ありがとうございました。 –
私はいくつかのクラスで 'default'と' shared'が慣例によってどのように使われているのかを見ています。 – zekel
あなたの最初のソリューションでは、なぜallocを呼び出す前にthisMessageTypeがnilであるかをチェックするのですか?その前の行のために常にゼロにならないでしょうか?初心者を助けるためのThx。 –