我使用typedef NS_ENUM
重新组织旧代码中的数据常量。使用方法found here每个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 */
但是当我尝试包含float
变量
“非整数类型'NSNumber'是无效的基础类型'
e.g。
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
变量的方式(至少我是这样的)使用它)。
方法in this answer只允许我在一个文件中执行已经组织的操作,但是没有提供在同一文件中重新组织float
变量的方法。请问有人可以解释如何执行此操作,以便所有变量都在一个.h
文件中定义,无论其类型如何?感谢
解
在我以不同方式处理问题之后,这是answered by rmaddy。
答案 0 :(得分:0)
在一个.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
等。 ..您不能使用任何非整数类型,如float
或double
,甚至不能使用任何客观的c类型。
您可以对浮动值执行枚举映射,例如https://stackoverflow.com/a/8867169/1825618