2012-03-17 3 views
0

Я объявил перечислимую тип данных, как:Использование перечисления типов данных в Objective C

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 как:

LabelTag.LABEL_TAG_2, ButtonTag.BUTTON_TAG2, ... 

Спасибо за любую помощь

clickedbutton.tag == BUTTON_TAG1 будет работать, но я предпочитаю, чтобы использовать его как tagName.tagValue, так что я могу иметь одни и те же теги для разных наборов тегов, например tagValue «NEW_TAG» в LabelTag и ButtonTag.

+0

Вы не ошибаетесь: переопределение перечислителя? –

+0

@ParagBafna: Есть ли способ обойти эту ошибку? – JohnK

ответ

5

Я считаю, что по той же конвенции, как это делается в C, где вы просто написать

if (clickedbutton.tag == BUTTON_TAG1) 

без указания типа перечисления. Вам нужно указать только тип, когда его переменная.

+0

да, это сработает, но я предпочитаю использовать его как tagName.tagValue, так что у меня могут быть те же tagValues ​​для разных наборов тегов, которые говорят tagValue «NEW_TAG» в LabelTag и ButtonTag. Спасибо за помощь. – Friendtam

+1

@Prabhakaran Paulthiravium, так как уже есть достаточный ответ, я бы хотел добавить, что тег является целым числом. Итак, все, что вам нужно сделать, это правильно инициализировать ваши кнопки: 'button1.tag = BUTTON_TAG_1'. И поскольку вы используете перечисление, вам может понравиться переименовать имена тегов в нечто более значимое, иначе вы торгуете число для символа с именем в виде числа. –

0

Посмотрите на заголовки Apple. Они просто префикс всех записей перечисления с именем перечисления, например. UIViewAnimationCurveEaseInOut в перечислении UIViewAnimationCurve. Я предлагаю вам сделать то же самое.

0

вы можете использовать switch-case

switch(LabelTag) 
{ 
    case : LABEL_TAG_1 

    break; 

    case : LABEL_TAG_2 

    break; 
} 
0

Если вы действительно хотите использовать форму LabelTag :: LABEL_TAG_2 вы можете использовать режим Objective-C++ (изменить расширение файла на .mm) и сделать это:

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

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

Например, в вашем коде можно указать LabelTag::a.

Смежные вопросы