2009-11-02 3 views
12

Objective-C에서 emum을 사용하는 것이 올바른지 (또는 올바른 방법일까요?)? 즉는 메뉴 항목을 사용하지 않고 단지 목록은 여기 = 1,로드 = 2, 목록 = 3 등Objective-C에서 enum을 사용 하시겠습니까?

enum menuItems { 
    add = 1 , 
    save  , 
    load  , 
    list  , 
    removeAll , 
    remove  , 
    quit  
}; 

int optionSelect; 

scanf("%d", &optionSelect); 

switch (optionSelect) { 
    case add: 
     //... 
     break; 
} 

환호 게리

+2

여기서 Obj-C를 수행하지 않으므로 C 태그가 추가되었습니다. 유효한 C가 Obj-C 내에서 완전히 유효하다는 것을 지적하기 만하면됩니다. :) – Pascal

+0

Thanks SanHolo ... – fuzzygoat

답변

17

당신이 만약을 열거 형에 의미 론적 의미를주고 싶다면 사용자 정의 된 유형을 정의하고 해당 유형의 변수로 "optionSelect"변수를 선언하는 것을 고려할 수 있습니다! 코드에서 ...

입니다 는
typedef enum menuItems { 
     add = 1, 
     save, 
     load, 
     list, 
     removeAll, 
     remove, 
     quit} MenuItem; 


MenuItem optionSelect; 

scanf("%d", &optionSelect); 

switch (optionSelect) { 
    case add: 
    ... 
    break; 
    . 
    . 
    . 
} 

, 거의 같은 일을 당신이 쓴하지만, 개발자의 측면에서 당신은 변수 "optionSelect"에 특별한 의미를 부여하지 단순한 INT!

+1

'NS_ENUM'과'NS_OPTIONS'을 꼭 확인하십시오. Apple이 제공 한 매크로는 열거 형을 작성하는 데있어 많은 추측을합니다. http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

당신의 방식대로 작동합니다. 당신은 변수 나 매개 변수의 유형으로 메뉴 아이템을 사용하고자하는 경우, 당신은 타입 정의를 수행해야합니다이에서

typedef enum {add = 1,save,load,list,removeAll,remove,quit} menuItems; 
menuItems m = add; 
[myobj passItem:m]; 
3

을, 미래, 그것은 NS_ENUM을 언급 할 가능성도 도움이됩니다. 당신은 그것을 좋아 사용하십시오 :

명시 적으로 정상 enumtypedef와 거의 같은 효과를 가지고 있지만
typedef NS_ENUM(uint16_t, TYEnummedType) 
{ 
    TYEnummedType1, 
    TYEnummedType2 
}; 

혹시 어딘가에 이런 일을 포장하려는 경우 정말 도움이 정수 유형을 지시, 정확 귀하의 struct 정렬에서, 다른 용도 사이.

버전 6.0과 OS X 10.8이 추가 된 iOS SDK에 추가되었지만 그저 C 매크로 일 뿐이며 바닐라 typedefenum으로 할 수없는 것을 추가하지 않으므로 걱정할 필요가 없습니다. 약. 그것은 오직 두 가지를 묶는 명시 적으로 만 존재합니다.

관련 문제