在iOS中如何创建和使用枚举类型?

30

我开始学习iOS开发。

我想在我的示例项目中使用枚举

我已经在sample.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

如何做到这一点?这必须用于整个项目。

如何将枚举作为类变量而不是实例变量创建?


将枚举声明为静态不会导致编译错误。但是如何使用它呢?我尝试了以下代码:"enum days d;",但是出现了错误。 - Jeeva J
静态方法不提供创建实例。您可以使用 days.sa - Himanshu Joshi
int a = days.sa; 会在编译时出现错误。 - Jeeva J
你能够记录 days.sa 吗? - Himanshu Joshi
如果我在viewController.m中写days.sa,它会给出编译时错误.. - Jeeva J
4个回答

51
在您创建的枚举中,sm等现在可以全局使用(即对导入 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
};

1
如果我不加上“=1”的部分,会发生什么?枚举还能正常工作吗? - GeneCode
3
是的,它仍然能够工作,@GeneCode。默认情况下,它将从 0 开始枚举而不是 1。我在这种情况下选择 1 的唯一原因是为了与问题中声明的枚举相匹配。 - stefandouganhyde

10

嘿,你可以像这样使用枚举,这里有一个示例

在 .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;
    }

如果你想了解更多,请点击这里

5
#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;
}

4

在 Enumrations.h 文件中创建枚举

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

}type;

无论您在哪里使用此枚举,只需导入 Enumrations.h,即可使用 Atype 而不创建类型对象。

您可以简单地使用 NSLog(@"%@",@(Atype))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接