2009-11-02 10 views
12

これは、Objective-Cでemumを使用するのに正しい(または有効な方法)ですか?すなわちmenuItemには使用されるが、ちょうどここでは= 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

ありがとう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; 
    . 
    . 
    . 
} 

、ほとんど、あなたが書かれている同じものですが、開発者の側からあなただけの単純なint型、変数に「optionSelectを」特別な意味を与えるません!

+1

「NS_ENUM」と「NS_OPTIONS」を必ずチェックしてください。 Appleが提供したこれらのマクロは、enumを書くことから推測の余地があります。 http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

あなたの方法はうまくいくでしょう。あなたは、変数やパラメータの型としてメニューアイテムを使用したい場合は、あなたがのtypedefを実行する必要があります。この中

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

を、将来は、それがNS_ENUMを言及する可能性も役に立ちます。あなたは好きで、それを使用したい:

typedef NS_ENUM(uint16_t, TYEnummedType) 
{ 
    TYEnummedType1, 
    TYEnummedType2 
}; 

通常enumtypedefとほぼ同じ効果を持っていますが、明示的にあなたがどこかにこれらの事をオフパックにしたい場合は本当に便利である整数型を、指示こと、正確ですあなたのstructアライメントでは、他の用途の間で。

バージョン6.0とOS X 10.8でiOS SDKに追加されましたが、これは単なるCマクロであり、バニラtypedefenumでできなかったことを追加しないため、後方互換性はありません約。それは、明示的にのみ、2つのものを結びつけるために存在します。

関連する問題