6

NSLog を使用して列挙型の特定の値に格納された値を表示しようとしています。次の例では、出力を次のように取得しようとしています: 5 represents month of May.

enumNSLog で使用する正しいトークンは何ですか? %i と %@ を使用してみましたが、どちらも機能しません。

ありがとう!

enum month {jan = 1, feb, march, apr, may, jun, jul, aug, sep, oct, nov, dec};
enum month amonth;
int x = 5;
amonth = x;
NSLog(@"%i represents month of %@", x,amonth);
4

1 に答える 1

9

残念ながら、あなたが求めていることは不可能です。列挙型名は、コンパイル後は保持されません (コンパイラで利用可能なデバッグ情報を除く)。したがって、a) アプリにデバッグ情報を送り、b) 埋め込まれたデバッグ情報を使用するアプリ内にデバッガーを効果的に記述しない限り、うまくいきません。

この問題の一般的な解決策は、switchステートメントを使用して、適切な名前を返す関数を提供することです。

NSString *monthName(enum month m) {
    switch (m) {
        case jan:
            return @"jan";
        case feb:
            return @"feb";
        ...
    }
    return @"unknown";
}

このアプローチの利点の 1 つは、名前をローカライズできることです。

于 2012-08-17T20:06:24.477 に答える