2009-11-02 19 views
12

Bu, Objective-C'deki emilimleri kullanmak için doğru (veya geçerli bir yol) mu? yani Menuıtem kullanılmaz ama sadece liste burada = 1, yük = 2, liste = 3 vbNesnenin C nesnesini kullanma?

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

int optionSelect; 

scanf("%d", &optionSelect); 

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

alkış gary

+2

Burada Obj-C olmadığından C etiketi eklendi. Sadece geçerli C'nin Obj-C içinde tamamen geçerli olduğuna işaret etmek için. :) – Pascal

+0

Teşekkürler SanHolo ... – fuzzygoat

cevap

17

Eğer numaralandırmaya semantik bir anlam vermek istiyorsanız, özelleştirilmiş bir tip tanımlamayı ve "optionSelect" değişkenini bu tip değişken olarak bildirmeyi düşünebilirsiniz! kodunda ...

olduğunu
typedef enum menuItems { 
     add = 1, 
     save, 
     load, 
     list, 
     removeAll, 
     remove, 
     quit} MenuItem; 


MenuItem optionSelect; 

scanf("%d", &optionSelect); 

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

, neredeyse aynı şey yazdım ama geliştirici yanından değişken "optionSelect" belirli bir anlam vermek değil, sadece basit bir int!

+1

"NS_ENUM" ve "NS_OPTIONS" öğelerini kontrol ettiğinizden emin olun. Bu Apple'lar tarafından sağlanan makrolar, yazım enlemlerini tahmin etmekten çok zaman ayırıyor. http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

Yolunuz çalışacaktır. Eğer değişkenler veya parametreler için bir türü olarak menuitems kullanmak istiyorum Ancak, bir typedef yapmanız gerekecektir: Bu ise

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

, gelecek, bu NS_ENUM söz muhtemelen de yararlı olacaktır. Bunu ister kullanırsınız:

açıkça normal enum ve typedef hemen hemen aynı etkiye sahiptir fakat
typedef NS_ENUM(uint16_t, TYEnummedType) 
{ 
    TYEnummedType1, 
    TYEnummedType2 
}; 

Hiç bir yerde bunları defetmek istiyorsanız gerçekten yararlı olduğunu tamsayı türü, dikte, kesin Diğer kullanımların yanı sıra, struct dizilişinizde.

O 10.8 ile sürüm 6 ve OS X ile iOS SDK eklendi ama sadece bir C makro ve sen vanilya typedef ve enum ile yapamadı şey eklemek yoktur, bu nedenle endişe hiçbir geriye dönük uyumluluk var hakkında. Sadece iki şeyi bir araya getirmek için açıkça var.

İlgili konular