2012-03-17 105 views
0

我宣佈一個枚舉數據類型,如:使用枚舉數據類型

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,在LabelTag和ButtonTag中都會使用tagValue「NEW_TAG」。

+0

你沒有得到錯誤:重新宣佈統計員? – 2012-03-17 10:25:17

+0

@ParagBafna:有什麼辦法可以解決這個錯誤嗎? – JohnK 2013-05-10 14:25:33

回答

5

我相信它遵循相同的約定在C做,你只是寫

if (clickedbutton.tag == BUTTON_TAG1) 

沒有指定枚舉類型。您只需指定其變量的類型。

+0

是的,這將工作,但我更喜歡使用它像tagName.tagValue,這樣我可以有不同的標記集相同的tagValues說tagValue「NEW_TAG」在LabelTag和ButtonTag。 感謝您的幫助。 – Friendtam 2012-03-17 09:08:51

+1

@Prabhakaran Paulthiravium因爲已經有了足夠的答案,我想補充說一個標籤是一個整數類型。所以你所要做的就是正確地初始化你的按鈕:'button1.tag = BUTTON_TAG_1'。而且由於您使用的是枚舉,所以您可能希望將標籤的名稱重命名爲更有意義的名稱,否則,您將爲名爲數字的符號進行交易。 – 2012-03-17 10:25:21

0

看看蘋果的標題。它們只是以enum的名字作爲前綴,例如, UIViewAnimationCurveEaseInOut中的enum 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爲例。