2016-05-31 4 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 без имени. Имя становится именем typedef, которое будет использоваться для NS_ENUM. Использование не уникального имени, такого как «unused_name», приводит к неприятностям. Не указывать имя вообще не получится. И это не проблема с заголовком - это проблема с вашим кодом. Вы делаете что-то неправильно, и компилятор говорит вам. – gnasher729

+0

@ gnasher729 Если мне не хватает чего-то, у вас может быть NS_ENUM без имени (например, второй блок кода в вопросе). Он просто отображается как 'enum ' в завершении кода Xcode. – 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 
}; 
Смежные вопросы