0

c# では、enum を宣言し、objectis enumVariable.ToString("g") -c の what is the コマンドを使用してこれを行うことで、そのリテラルを出力できます。

たとえば、c# では次のように記述できます。

class Sample 
{
    enum Colors {Red, Green, Blue, Yellow = 12};

    public static void Main() 
    {
       Colors myColor = Colors.Yellow;
       Console.WriteLine("myColor.ToString(\"d\") = {0}", myColor.ToString("d"));         
       Console.WriteLine("myColor.ToString(\"g\") = {0}", myColor.ToString("g"));
   }
}

// This example produces the following results:
// myColor.ToString("d") = 12
// myColor.ToString("g") = Yellow

文字列の配列を作成して値を保持したり、大文字と小文字を切り替えて関数を記述したりできることはわかっていますが、それは 1970 年に記述された ac 言語に適した解決策のようです :)

エレガントなソリューションを知っている場合は、お知らせください。

4

3 に答える 3

2

開発者が enum 値から文字列を受け取りたい場合の最も一般的なケースは、複雑なオブジェクト (XML、JSON、URL など) の値/キーとしてそれ (文字列) を使用することです。

必ずしも enum 値からまったく同じ文字列が必要なわけではありません。Objective-C では、マッピングを使用する必要があります。列挙型 (NSNumber にラップされている) のキーと NSString 型の値を使用して NSDictionary を作成します。

// your enum
enum
{
    kAPXStateOpened,
    kAPXStateClosed,
    kAPXStateUnknown
};
...

// static map
static NSDictionary *theStateMap = nil;
static dispatch_once_t theStateMapDispatch = 0;
dispatch_once(&theStateMapDispatch,
^{
    theStateMap = [NSDictionary dictionaryWithObjectsAndKeys:
                @"opened", [NSNumber numberWithInteger:kAPXStateOpened],
                @"closed", [NSNumber numberWithInteger:kAPXStateClosed],
                @"broken", [NSNumber numberWithInteger:kAPXStateUnknown],
                nil];
});

self.currentState = kAPXStateOpened;
NSString *theStringValueFromState = [theStateMap objectForKey:[NSNumber numberWithInteger:self.currentState]];
NSLog(theStringValueFromState); // "opened"
于 2013-02-27T13:26:29.163 に答える
0

ObjCの列挙型は、オブジェクトではなく、定義された値のセットを持つ整数です。したがって、それらにはメソッドがあります。列挙型を処理するC関数がいくつかあるかもしれませんが、私はそれらに精通していません。(他の誰かがそれらを知っているなら興味があるでしょう)。

列挙型は整数であるため、列挙型を使用する変数に未定義の値を入れることもできます。

次に例を示します。

typedef enum {
    enumValueA,
    enumValueB
} EnumName;

// Useful when you want to define specific values.
typedef enum {
    enumX = 1, 
    enumY = 100
} AnotherEnum;

とコードで:

EnumName x = enumValueA;

ただし、これらも有効です。

EnumName x = 0; // = enumValueA
EnumName x = 3; // Not defined in the enum.

したがって、列挙型は基本的に、特定の整数値のセットに英語のような名前を使用する方法です。

UIとロギングに含めるためにそれらから文字列を取得するには、列挙値を文字列に手動でマップする必要があります。列挙値がインデックスを提供する文字列配列は、比較的簡単に配置できます。

于 2013-02-27T13:15:17.823 に答える
0
int someInt = [NString stringWithFormat:@"%d",yourEnumVariable];
于 2013-02-27T13:44:56.957 に答える