2013-02-01 36 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)。

你可以寫一個翻譯方法,返回枚舉值的名稱,如

​​

這是做這件事的一個討厭的方式,因爲它不是完全彈性的枚舉值發生變化,但其將字符串與枚舉值相關聯的方法。

+0

就像WDUK說的那樣,它不可能真正以合理的方式完成。原因是編譯器實際上用值替換了這些枚舉名稱,所以它們在運行時甚至不可用。像WDUK這樣的解決方案當然會起作用,但也許你應該考慮一種不同的模式來實現你想要的? –

+1

如果此答案適合您的需求,請您接受它嗎?謝謝 – WDUK

18

LLDB調試器將顯示字符串標識符。因此,不要使用NSLog,而是使用帶有調試器命令行爲的斷點(在您的情況下爲「p d」),並將斷點設置爲在評估後自動繼續。

您可以通過右鍵單擊藍色標記來配置斷點。