c,obj c enum没有标签或标识符

时间:2011-12-07 10:56:43

标签: objective-c c ios enums

我正在学习cocos2d [在iPhone上为目标C打开gl包装],现在玩精灵已经在一个例子中找到了这个,

 enum {  
easySprite =   0x0000000a,
mediumSprite = 0x0000000b,
hardSprite =   0x0000000c,
backButton =   0x0000000d,
magneticSprite = 0x0000000e,
magneticSprite2 = 0x0000000f
};

...

 -(id) init
 {...
  /second sprite
    TSprite *med = [TSprite spriteWithFile:@"butonB.png"]; //blue
    [med SetCanTrack:YES];
    [self addChild: med z:1 tag:mediumSprite];
    med.position=ccp(299,230);
    [TSprite track:med];

因此枚举中定义的变量用于创建的精灵对象的标记名称

但我不明白

  1. 为什么要将hexa中的值赋给要使用的标签
  2. 带有标记的枚举
  3. 因为我在obj C和C中知道这个枚举

         typedef enum {
         JPG,
         PNG,
          GIF,
         PVR
         } kImageType;
    

    谢谢!

3 个答案:

答案 0 :(得分:3)

通常,在创建枚举时,您希望将其用作类型(变量,方法参数等)。

在这种情况下,它只是一种如何声明整数常量的方法。由于不希望将枚举用作类型,因此名称不是必需的。

编辑: 当整数是二进制掩码时,通常使用十六进制数。你不会看到任何像+, - ,*,/这样的数字运算符,你会看到按位运算符(!,&,|,^)。

十六进制数中的每个数字代表4位。整数是一个32位整数,在这种情况下用十六进制写,你说你只使用最后四位,其他位可以用于别的东西。从十进制数字来看,这并不明显。

答案 1 :(得分:2)

枚举是自动分配的值,从0开始递增,但您可以指定自己的值。

如果您没有指定任何值,则它们将从0开始,如:

typedef enum {
 JPG,
 PNG,
 GIF,
 PVR
 } kImageType;

但你可以为它们分配值:

typedef enum {
 JPG = 0,
 PNG = 1,
 GIF = 2,
 PVR = 3
 } kImageType;

甚至

typedef enum {
 JPG = 100,
 PNG = 0x01,
 GIF = 100,
 PVR = 0xff
 } kImageType;

你想要的任何东西,重复的价值也是可以的。

我不确定为什么给他们这些特定的价值,但他们可能有一些与使用有关的意义。

答案 2 :(得分:1)

好吧,你似乎正在解决一个可怕的例子。 :)

至少就枚举而言。任何人都可以定义枚举条目的实际值,但是使用十六进制数字没有任何好处,特别是使用to f(10到15)启动十六进制数字是没有意义的。该示例也适用于此枚举:

enum {  
easySprite = 10,
mediumSprite,
hardSprite,
backButton,
magneticSprite,
magneticSprite2
};

除非将枚举从值10开始,否则它可能会在没有指定任何具体值的情况下工作。