【问题标题】:c, obj c enum without tag or identifierc, obj c 不带标签或标识符的枚举
【发布时间】:2011-12-07 10:56:42
【问题描述】:

我正在学习cocos2d [open gl wrapper for objective C on iPhone],现在玩精灵在一个例子中发现了这个,

 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. 为什么要为要使用的标签提供十六进制值
  2. 没有标签的枚举

我知道 obj C 和 C 中的这个枚举

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

谢谢!

【问题讨论】:

  • 这不是特定于 Objective-C 的问题,因此我将其重新标记为 C。
  • 它与obj C和cocos2d有关,因为这是在OBJC中创建的sprite,而不是在C文件中,我也想要一个obj C人的观点,谢谢
  • 你在哪里找到这个例子?当然有更好的 Cocos2D 示例可用。
  • 嗨,这里是示例juanmunozar.blogspot.com/2009/02/… 的链接,该类在此博客中的某个位置

标签: objective-c c ios enums


【解决方案1】:

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

在这种情况下,它只是一种声明整数常量的方法。由于不想使用枚举作为类型,所以名称不是必需的。

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

十六进制数中的每个数字代表 4 位。整数是一个 32 位整数,在这种情况下以十六进制写入,您是说您只使用最后四位,而其他位可用于其他用途。这从十进制数中不会很明显。

【讨论】:

  • 添加了十六进制数说明。
【解决方案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;

任何你想要的,重复值也可以。

我不确定为什么要给它们这些特定的值,但它们可能具有与使用相关的某些含义。

【讨论】:

  • GIF,你没有和其他人一样缩进吗?
【解决方案3】:

嗯,你似乎正在研究一个糟糕的例子。 :)

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

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

除非有必要让枚举以值 10 开头,否则它可能会在不指定任何具体值的情况下工作。

【讨论】:

    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多