2014-03-05 95 views
19

我已經開始學習iOS開發。哪裏可以創建以及如何在iOS中使用Enum?

我想在我的示例項目中使用enum

我宣佈enumsample.h如下。我希望我已經正確地宣佈了這一點。

typedef enum{s=1,m,t,w,th,f,sa} days; 

我想在viewController.m中使用它。在viewController.h,我已經輸入sample.h

我想使用名稱爲"days.sa"的枚舉。但更多的代碼,我在谷歌搜索,他們說,像創建一個"sample.h"實例變量像

@interface Sample:NSObject 
{ 
    days d; 
} 

如果我想用這種方式,我需要創建和使用實例。但我不想那樣。

我需要使用像

days.d or days.sa or days.th 

那怎麼辦?,這必須用於整個項目和

如何創建枚舉爲類變量,而不是實例變量?

+0

使它成爲'靜態' –

+0

是的聲明枚舉爲靜態不會導致編譯錯誤。但如何使用它?我試着像「enum days d;」一樣。但給出錯誤。 –

+0

靜態不提供創建實例。你可以使用** days.sa ** –

回答

42

在您創建的枚舉中,s,m等等現在可以在全球範圍內使用(即導入sample.h的任何東西)。例如,如果您需要與星期六相對應的整數,則僅爲sa,而不是days.sa。我認爲你把結構與枚舉搞混了。

由於這個原因,最好在枚舉中使用更多的詳細名稱。例如:

typedef enum 
{ 
    WeekdaySunday = 1, 
    WeekdayMonday, 
    WeekdayTuesday, 
    WeekdayWednesday, 
    WeekdayThursday, 
    WeekdayFriday, 
    WeekdaySaturday 
} Weekday; 

例如, WeekdayMonday現在只是在您的應用中編寫2的另一種方式,但會使您的代碼更具可讀性並預先定義類型爲Weekday的變量的可能合法值。

以上是好的,但爲了更好的編譯器的支持,並確保一個Weekday的大小,我推薦使用NS_ENUM

typedef NS_ENUM(NSInteger, Weekday) 
{ 
    WeekdaySunday = 1, 
    WeekdayMonday, 
    WeekdayTuesday, 
    WeekdayWednesday, 
    WeekdayThursday, 
    WeekdayFriday, 
    WeekdaySaturday 
}; 
+0

如果我不放置= 1部分會怎樣。會發生什麼?枚舉是否仍然有效? – GeneCode

+2

是的,它仍然可以工作,@GeneCode。默認情況下,它將從「0」而不是「1」開始枚舉。在這種情況下,我選擇'1'的唯一原因是與問題中聲明的枚舉相匹配。 – stefandouganhyde

2

在Enumrations.h

typedef enum 
{ 
    Atype = 1, 
    Btype, 
    Ctype, 
    Dtype, 
    Etype, 

}type; 

創建枚舉如果您想要使用此枚舉,只需導入Enumrations.h,並且可以使用Atype而不創建類型對象。您可以簡單地使用NSLog(@"%@",@(Atype))

5

嘿,你在這裏使用這樣的枚舉是一個例子

在.H定義枚舉

typedef enum{s=1,m,t,w,th,f,sa} days; 

在。m玩像這樣的枚舉元素

days d1 =f; 



    switch (d1) { 
     case m: 
     case t: 
      NSLog(@"You like Tuesday"); 
      break; 
     case w: 
     case th: 

      break; 
     case f: 
      NSLog(@"You like friday"); 
      break; 
     case sa: 
      NSLog(@"You satureday"); 
      break; 
     case s: 
      NSLog(@"You like sunday"); 
      break; 
     default: 
      break; 
    } 

如果你想了解更多click這個。

4
#import <Foundation/Foundation.h> 

typedef enum{ 
    s=1,m,t,w,th,f,sa 
} days; 

@interface weekday : NSObject 
@property (nonatomic, assign) days day; 
@end 

@implementation weekday 
@end 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

    weekday *sunDay=[[weekday alloc]init]; 
    sunDay.day=s; 
    NSLog(@"Today is %d",sunDay.day); 

    } 
return 0; 
} 
相關問題