18

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

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

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

2 に答える 2

22

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

青いマーカーを右クリックすると、ブレークポイントを構成できます。

于 2013-08-25T08:01:20.553 に答える
10

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

変換メソッドを記述して、列挙値の名前を返すことができます。

- (NSString*)nameForDay:(DAYS)day {
    switch (day) {
        case SUN:
            return @"SUN";
        break;
        case MON:
            return @"MON";
        break;
        case TUES:
            return @"TUES";
        break;
        default:
            return nil;
        break;
    };

    return nil;
}

列挙値の変更に対して完全に回復力があるわけではないため、これは厄介な方法ですが、文字列を列挙値に関連付ける方法です。

于 2013-02-01T17:35:05.803 に答える