在Objective C中使用枚举数据类型

时间:2012-03-17 08:25:53

标签: objective-c enums

我已经声明了一个枚举数据类型,如:

typedef enum TagTypes
{
   BUTTON_TAG_1 = 1,
   BUTTON_TAG_2,
   BUTTON_TAG_3,
   NEW_TAG

}ButtonTag;

typedef enum TagType
{
   LABEL_TAG_1 = 1,
   LABEL_TAG_2,
   NEW_TAG
}LabelTag;

我希望通过此标记值找到按钮或标签的相应标记

(clickedbutton.tag == ButtonTag.BUTTON_TAG1)(changingLabel.tag == LabelTag.LABEL_TAG_1)

但是这个语法在Obj C中似乎不可能,它会引发错误,说出预期标识符或“)”

有没有办法可以通过指定tagDatatype来选择tagNames,如:

LabelTag.LABEL_TAG_2, ButtonTag.BUTTON_TAG2, ...

感谢您的帮助

clickedbutton.tag == BUTTON_TAG1可以使用,但我更喜欢像tagName.tagValue一样使用它,这样我就可以为不同的标签集设置相同的tagValues,在LabelTag和ButtonTag中都使用tagValue“NEW_TAG”。

4 个答案:

答案 0 :(得分:5)

我认为它遵循的原则与您在C中编写

的惯例相同
if (clickedbutton.tag == BUTTON_TAG1)

未指定枚举类型。您只需在变量时指定类型。

答案 1 :(得分:0)

看看Apple的标题。它们只是在所有枚举条目前加上枚举的名称,例如:枚举UIViewAnimationCurveEaseInOut中的UIViewAnimationCurve。我建议你这样做。

答案 2 :(得分:0)

您可以使用switch-case

switch(LabelTag)
{
   case : LABEL_TAG_1

   break;

   case : LABEL_TAG_2

   break;
}

答案 3 :(得分:0)

如果确实想要使用LabelTag :: LABEL_TAG_2的形式,您可以使用objective-c ++模式(将文件扩展名更改为.mm)并执行此操作:

class FirstEnum
{
    public: 
    enum { a, b, c } ;
} ;

class SecondEnum
{
    public:
    enum { a, b, c } ;
} ;

然后在您的代码中可以参考LabelTag::a例如。