2014-07-21 34 views
1

我有一長串的#define語句(Objective-C),它們被分配了唯一的整數值。自動爲#defines分配唯一值

實際值無關緊要;他們只需要非零且獨特。這些值用於創建NSNumbers和switch語句。

例如:

#define FUNCTION_s 1 
#define FUNCTION_a 7 
#define FUNCTION_kk 3 

用法:

NSArray *array = @[ @(FUNCTION_s), @(FUNCTION_a) ]; 
// ... 
switch (val) { 
    case FUNCTION_kk: 
     // code 
    break; 
} 

我想簡化名單,所以我不擔心實際的數字或意外使用重複的值。爲了便於閱讀,我經常重新排列清單,所以我已經使用過的數字並不總是很明顯。

有沒有類似於使用枚舉的方法,它會自動爲每個#define分配一個唯一值?

+0

爲什麼他們需要'#define's?正如你甚至在問題中提到的,並在下面trick14回覆,這是一個'enum'的聲音。 – walkytalky

回答

1

您可以使用枚舉。

typedef NS_ENUM(NSUInteger, FUNCTIONS) { 
    FUNCTION_s = 1, 
    FUNCTION_a, 
    FUNCTION_kk, 
}; 

FUNCTION_a將是2並且kk將是3.它是遞增的。

FUNCTION val; 
// set val 

switch(val) 
{ 
    // casese 
} 
+0

我認爲是可能的,但無論使用哪些功能,我都會遇到錯誤。例如,這種情況陳述'case FUNCTION_kk:'產生這個錯誤「使用未聲明的標識符'FUNCTION_kk'」。所以,我顯然不使用正確的語法。 – Jeff

+0

@Jeff //你在哪裏聲明瞭函數?我總是使用這種編碼風格,但從來沒有這個問題。你可以添加你的代碼嗎? – Ryan

+0

根據您的語法示例,我仔細研究了代碼,並意識到枚舉出錯了位置(在一個方法中,我的#define過得很舒適),因此超出了範圍。我把它移到頂端,現在它正在工作。回答。謝謝。 – Jeff