在iOS中创建和使用Enum的位置?

Jee*_*Jsb 27 enums objective-c ios

我已经开始学习iOS开发了.

我想enum在我的示例项目中使用.

我已经声明enumsample.h像下面.我希望我已经正确宣布了这一点.

typedef enum{s=1,m,t,w,th,f,sa} days;
Run Code Online (Sandbox Code Playgroud)

我想用这个viewController.m.在viewController.h,我已经导入sample.h.

我想使用名称之类的枚举"days.sa".但是我在谷歌搜索的代码越多,他们就像在"sample.h"类似的地方创建一个实例变量

@interface Sample:NSObject
{
    days d;
}
Run Code Online (Sandbox Code Playgroud)

如果我想使用这种方法,我需要创建和使用实例.但我不想那样.

我需要使用像

days.d or days.sa or days.th
Run Code Online (Sandbox Code Playgroud)

怎么做?,这必须用于整个项目和

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

ste*_*yde 51

在您创建的枚举中s,m等等现在可以在全球使用(即对于任何导入的内容sample.h).例如,如果你想要与星期六相对应的整数,那就是sa,而不是days.sa.我认为你的结构令人困惑.

因此,最好在枚举中使用更详细的名称.就像是:

typedef enum
{
    WeekdaySunday = 1,
    WeekdayMonday,
    WeekdayTuesday,
    WeekdayWednesday,
    WeekdayThursday,
    WeekdayFriday,
    WeekdaySaturday
} Weekday;
Run Code Online (Sandbox Code Playgroud)

因此WeekdayMonday,现在只是2在您的应用程序中编写的另一种方式,但会使您的代码更具可读性,并预先定义类型变量的可能合法值Weekday.

以上是好的,但为了更好的编译器支持并确保a的大小Weekday,我建议使用NS_ENUM:

typedef NS_ENUM(NSInteger, Weekday)
{
    WeekdaySunday = 1,
    WeekdayMonday,
    WeekdayTuesday,
    WeekdayWednesday,
    WeekdayThursday,
    WeekdayFriday,
    WeekdaySaturday
};
Run Code Online (Sandbox Code Playgroud)

  • 是的,它仍然有效,@ GeneCode.默认情况下,它将从"0"而不是"1"开始枚举.在这种情况下我选择`1`的唯一原因是与问题中声明的枚举匹配. (3认同)

mor*_*oko 8

嘿你这样使用enum就是一个例子

在.h中定义枚举

typedef enum{s=1,m,t,w,th,f,sa} days;
Run Code Online (Sandbox Code Playgroud)

在.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;
    }
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多,请点击此处.


小智 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;
}
Run Code Online (Sandbox Code Playgroud)