2016-05-31 7 views
0

Diese Zeilen in meinem Code OK sind:NS_ENUM ohne Namen

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

Aber die folgenden Zeilen nicht. Der Compiler beklagt sich, dass der variable (...) Teil von NS_ENUM keine Variable enthält.

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

Ich habe das gleiche Problem mit einem CF_ENUM.

Ich denke, es ist kein Problem der Header-Datei (Foundation/NSObjCRuntime.h oder Core Foundation).

+0

Ich schrieb eine Antwort, aber es sieht so aus, als ob du alles richtig machst. Stellen Sie nur sicher, dass Ihre enum-Deklarationen außerhalb von Objective-C-Schnittstellen- oder Implementierungscodeblöcken liegen. – JAL

+0

Sie können kein NS_ENUM ohne einen Namen haben. Der Name wird zum Namen des Typedef, der für NS_ENUM verwendet werden soll. Die Verwendung eines nicht eindeutigen Namens wie "unused_name" bringt Sie in Schwierigkeiten. Kein Name wird überhaupt nicht funktionieren. Und es ist kein Problem mit einem Header - es ist ein Problem mit Ihrem Code. Sie machen etwas falsch, und der Compiler sagt es Ihnen. – gnasher729

+0

@ gnasher729 Wenn ich etwas nicht vermisse, kann man tatsächlich einen NS_ENUM ohne Namen haben (wie der zweite Codeblock in der Frage). Es erscheint nur als 'enum 'in Xcode Code Vervollständigung. – JAL

Antwort

0

Blick auf den Kommentar in der NSObjCRuntime.h Header-Datei:

/* 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) { 
    ... 
}; 
*/ 

Kurz gesagt, verwenden Sie nicht typedef wenn Ihr Enum unbenannte ist. Stellen Sie außerdem sicher, dass die Enumeration am oberen oder unteren Rand der Datei außerhalb von Objective-C-Schnittstellen oder Implementierungsblöcken deklariert ist.

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 
};