Как определить несколько типов переменных в одном файле .h с помощью `typedef NS_ENUM`
Я использовал typedef NS_ENUM
для реорганизации констант данных в старом коде. Используя найденный здесь подход , каждый typedef
объявляется в одном файле .h
, который может быть импортирован в любой класс проекта. Содержимое файла .h помещается в сообщение компилятору. Это хорошо работает для переменных int
.
MYCharacterType.h
#ifndef MYCharacterType_h
#define MYCharacterType_h
typedef NS_ENUM(NSInteger, MARGIN)
{
MARGIN_Top = 10,
MARGIN_Side = 10,
MARGIN_PanelBaseLine = 1
};
...
#endif /* SatGamEnumType_h */
Но Xcode жалуется, когда я пытаюсь включить float
variables
"Неинтегральный тип NSNumber является недопустимым базовым типом
например.
typedef NS_ENUM(NSNumber, LINE_WIDTH) {
LINE_WIDTH_Large = 1.5,
LINE_WIDTH_Medium = 1.0,
LINE_WIDTH_Small = 0.5,
LINE_WIDTH_Hairline = 0.25
};
Я получаю то же сообщение, использую ли я NSValue
или NSNumber
, поэтому я подозреваю, что typedef NS_ENUM
не способ определить переменные float
(или, по крайней мере, так, как я его использую).
Подход в этом ответе позволил бы мне делать то, что я уже организовал в одном файле, но не предлагает способ реорганизации переменных float
в тот же файл. Может кто-нибудь объяснить, как это сделать, чтобы все переменные были определены в одном файле .h
независимо от их типа? Благодаря
РЕШЕНИЕ
Это был ответил rmaddy после того, как я подошел к вопросу по-другому.
Ответы
Ответ 1
Определение разных перечислений в одном .h
.. как просто добавьте его в один файл.
typedef NS_ENUM(NSInteger, MARGIN)
{
MARGIN_Top = 10,
MARGIN_Side = 10,
MARGIN_PanelBaseLine = 1
};
typedef NS_ENUM(long, ENUM_2)
{
ENUM_2_1 = 10,
ENUM_2_2 = 20,
ENUM_2_3 = 30,
};
typedef NS_ENUM(long, ENUM_3)
{
ENUM_3_1 = 10,
ENUM_3_2 = 20,
ENUM_3_3 = 30,
};
// And so on as many as you want
И ваш второй вопрос: Enums могут быть только из интегральных типов данных, таких как int
, long
, long long
, unsigned int
, short
и т.д.... Вы не можете использовать Non- Интегральные типы типа float
или double
или даже не любые объективные c-типы.
Вы можете сделать отображение перечисления для значений float, таких как fooobar.com/info/23894/...