2016-05-31 54 views
0

此行是行,我的代碼:NS_ENUM沒有名字

typedef NS_ENUM(NSInteger, unused_name) 
{ k_a = 123, 
    k_b = 123, 
    k_c = 61 
}; 

但接下來的線都沒有。編譯器抱怨NS_ENUM的變量(...)部分不包含任何變量。

NS_ENUM(NSInteger) 
{ k_a = 123, 
    k_b = 123, 
    k_c = 61 
}; 

我和CF_ENUM有同樣的問題。

我認爲這不是頭文件(Foundation/NSObjCRuntime.h或Core Foundation)的問題。

+0

我寫了一個答案,但它看起來像你到目前爲止一切正常。只要確保你的枚舉聲明在任何Objective-C接口或實現代碼塊之外。 – JAL

+0

不能有沒有名字的NS_ENUM。該名稱成爲用於NS_ENUM的typedef的名稱。使用諸如「unused_name」之類的非唯一名稱會讓您陷入困境。根本不給名稱不起作用。這不是一個頭的問題 - 這是你的代碼的問題。你做錯了事,編譯器告訴你。 – gnasher729

+0

@ gnasher729除非我錯過了一些東西,實際上你可以有一個沒有名字的NS_ENUM(就像問題中的第二個代碼塊一樣)。它只是在Xcode的代碼完成中顯示爲enum 。 – JAL

回答

0

看在NSObjCRuntime.h頭文件的註釋:

/* NS_ENUM supports the use of one or two arguments. The first argument is always the integer type used for the values of the enum. The second argument is an optional type name for the macro. When specifying a type name, you must precede the macro with 'typedef' like so: 


typedef NS_ENUM(NSInteger, NSComparisonResult) { 
    ... 
}; 

If you do not specify a type name, do not use 'typedef'. For example: 

NS_ENUM(NSInteger) { 
    ... 
}; 
*/ 

總之,不要使用typedef如果你的枚舉是無名的。另外,確保在任何Objective-C接口或實現塊之外,在文件的頂部或底部聲明枚舉。

NS_ENUM(NSInteger) 
{ k_a = 123, 
    k_b = 123, 
    k_c = 61 
}; 

typedef NS_ENUM(NSInteger, unused_name) 
{ k_d = 123, 
    k_e = 123, 
    k_f = 61 
};