如何使用`typedef NS_ENUM`在一个.h文件中定义多个变量类型

时间:2017-05-29 02:43:35

标签: ios enums floating-point int typedef

我使用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变量

时,Xcode会抱怨
  

“非整数类型'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

1 个答案:

答案 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只能是完整的数据类型,例如intlonglong longunsigned intshort等。 ..您不能使用任何非整数类型,如floatdouble,甚至不能使用任何客观的c类型。

您可以对浮动值执行枚举映射,例如https://stackoverflow.com/a/8867169/1825618