2013-02-01 10 views
14

Ich versuche NSLog einige enums ich habe. Zum Beispiel gibt dieser Codeteil die Integer-Repräsentation der Enumeration aus, aber ich möchte, dass sie den tatsächlichen String-Namen ausgibt, in diesem Fall MON. Wie kann ich das machen?Druck String-Darstellung einer Enum, NSLog

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

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

Antwort

9

Nicht leicht. Der String-Bezeichner für einen Enum-Wert ist für den Entwickler, aber intern ist es einfach ein Wert mit einem bestimmten Typ (in Ihrem Beispiel DAYS).

Sie eine Umrechnungsmethode schreiben konnte, den Namen des ENUM-Wert zurückzukehren, zB

- (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; 
} 

Es ist eine unangenehme Art und Weise, es zu tun, wie es um die ENUM-Werte zu ändern, aber es ist ein nicht ganz elastisch ist Möglichkeit, eine Zeichenfolge mit einem Aufzählungswert zu verknüpfen.

+0

Wie WDUK sagt, kann es wirklich nicht wirklich auf eine vernünftige Weise getan werden. Der Grund ist, dass der Compiler diese Enum-Namen tatsächlich durch Werte ersetzt, sodass sie zur Laufzeit nicht verfügbar sind. Eine Lösung wie WDUKs würde natürlich funktionieren, aber vielleicht sollten Sie ein anderes Modell in Erwägung ziehen, um das zu erreichen, was Sie wollen? –

+1

Wenn diese Antwort Ihren Bedürfnissen entspricht, können Sie das bitte akzeptieren? Vielen Dank – WDUK

18

Der LLDB-Debugger zeigt die String-Identifier an. Anstatt also NSLog zu verwenden, könnten Sie einen Haltepunkt mit einer Debugger-Befehlsaktion (in Ihrem Fall "p d") verwenden und den Haltepunkt so einstellen, dass er nach der Auswertung automatisch fortgesetzt wird.

Sie können einen Haltepunkt konfigurieren, indem Sie mit der rechten Maustaste auf den blauen Marker klicken.