2013-02-01 23 views
14

私はいくつかの列挙型をNSLogにしようとしています。たとえば、このコードは列挙型の整数表現を出力しますが、実際の文字列名(この場合はMON)を出力します。どうやってやるの?列挙型の文字列表現、NSLog

#import <Foundation/Foundation.h> 
int main(void) 
{ 
    typedef enum { 
     SUN, 
     MON, 
     TUES 
    } DAYS; 

    DAYS d = MON; 
    NSLog(@"%@", d); 
    return 0; 
} 

答えて

9

容易ではありません。列挙型の値の文字列識別子は開発者用ですが、内部的には単に特定の型(例ではDAYS)の値です。

あなたはそれが変化する列挙値に完全に弾力的ではないとして、それを行うための厄介な方法ですが、そのA例えば

​​

、列挙値の名前を返すために、翻訳方法を書くことができ文字列を列挙型の値に関連付ける方法です。

+0

WDUKのように、本当に賢明な方法では本当にできません。その理由は、実際にコンパイラが列挙型の名前を値に置き換えているため、実行時には使用できなくなるからです。 WDUKのようなソリューションはもちろん動作しますが、あなたが望むものを達成するためには別のモデルを検討するべきでしょうか? –

+1

この回答があなたのニーズに合っていれば、それを受け入れることができますか?ありがとう – WDUK

18

LLDBデバッガは文字列識別子を表示します。したがって、NSLogを使用する代わりに、デバッガのコマンドアクション(あなたの場合は "p d")でブレークポイントを使用し、評価後に自動的にブレークポイントを設定することができます。

青色のマーカーを右クリックすると、ブレークポイントを設定できます。