2014-03-05 64 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; 
} 
相关问题