2010-05-14 51 views
9

我在其他地方見過給像這樣枚舉的默認值:的Objective-C/C給枚舉的默認值

typedef enum { 
MarketNavigationTypeNone = 0, 
MarketNavigationTypeHeirachy = 1, 
MarketNavigationTypeMarket = 2 
} MarketNavigationLevelType; 

..但我不記得這樣做的價值。如果我不給他們默認值 - 然後有人在重新排序枚舉 - 有什麼風險?

如果我總是使用枚舉名稱,甚至不用它們的整數值引用它們,是否有任何風險?

我能想到的唯一可能的問題是,如果我初始化一個來自數據庫的int值的枚舉 - 並且枚舉被重新排序 - 那麼應用程序將會中斷。

回答

2

一般而言,只有當枚舉暴露於某種外部API或將用於通過數據文件或其他方式交換數據時,這纔是重要的。如果枚舉僅在您的應用程序中使用,而在其他地方則無效,那麼實際值並不重要。

7

這不是默認值,你給他們他們將永遠有的價值。

如果您不顯式初始化它們,則第一個枚舉值爲零。對於所有其他人,如果沒有初始化程序,它們的值是前一個枚舉程序的值增加1。

有兩個原因給他們明確的值:

  • 你不希望他們有價值觀,他們不得不想弄清楚他們有什麼樣的價值(否則
  • 您或其他開發人員)

如果您始終用它們的名稱引用它們並且從不顯式使用整數值進行比較或賦值,則不需要明確給它們賦值。

+0

「默認值」 - 是的,我知道他們是不變的 - 我只是用了錯誤的名詞。 你沒有提到在應用程序之外存儲枚舉的事實,然後重新初始化它們? – bandejapaisa 2010-06-28 15:38:22

+0

@ban:如果外部接口不使用具有等效定義的枚舉,則會明確地爲它們分配一些整數值。 – 2010-06-28 17:11:58