enum定義時typedef的前與後
enum型別通常會與typedef關鍵字一起用,方便使用.
有兩種寫法,
第一種是typedef在enum前邊,如:
typedefenum {
UIViewAnimationCurveEaseInOut, // slow at beginning and end
UIViewAnimationCurveEaseIn, // slow at beginning
UIViewAnimationCurveEaseOut, // slow at end
UIViewAnimationCurveLinear
} UIViewAnimationCurve;
enum {
DDLogMessageCopyFile = 1 << 0,
DDLogMessageCopyFunction = 1 << 1,
};
typedef int DDLogMessageOptions;
兩者有何區別呢?先看DDLogMessageOptions定義體, <<是左移運算,定義這樣一些值通常是為了使這些值除了離散的options之外還有"|"運算的目的,從而組成更多的options,也就是options不僅限定義體中的那幾個.
這時如果用如下定義,
typedef enum {
DDLogMessageCopyFile = 1 << 0,
DDLogMessageCopyFunction = 1 << 1,
} DDLogMessageOptions;
那麼
DDLogMessageOptions op = DDLogMessageCopyFile | DDLogMessageCopyFunction 將編譯不過(VS會報錯,Xcode卻不報語法錯誤,看來Xcode標準遵循得不是很好), 也許有人說強制轉型, 但不轉型顯然更合邏輯與簡練.