Objective-C中的新枚举

Noo*_*low 31 cocoa objective-c

在最新的工具中,enum现在允许使用一种新的工具:

typedef enum CarType : NSUInteger {
  FourDoorCarType,
  TwoDoorCarType
} CarType;
Run Code Online (Sandbox Code Playgroud)

我的问题部分来自:

  1. 为什么我应该使用它而不是旧的方式?

  2. 为什么会CarType出现两次?我尝试跳过CarType第一行并将第一行留作" typedef enum : NSUInteger {",它似乎工作正常.有什么缺点,如果有的话?

  3. 有些类型NSUInteger可以使用吗?

zrz*_*zka 37

因为这种新方法可以帮助您自动完成,切换语句,更好,分别更精确的警告,...

坚持用宏...

typedef NS_ENUM( NSUInteger, CarType ) {
  FourDoorCarType,
  TwoDoorCarType
};
Run Code Online (Sandbox Code Playgroud)

...请阅读此示例/sf/answers/223332931/

NSInteger,...你想要什么类型?


Lil*_*ard 19

  1. 这明确定义了枚举使用的数字类型.这有助于解决可移植性问题.如果您需要对已签名和未签名的控制,它也会有所帮助

  2. 这里实际定义了两种类型.第一个是enum CarType第二个CarType,它是别名enum CarType.如果需要,可以省略第一个CarType.这只是防止enum CarType成为已定义的类型,但CarType仍然有效.人们做的另一件常见的事情是

    typedef enum _EnumName {
        values
    } EnumName;
    
    Run Code Online (Sandbox Code Playgroud)

    你决定在这里做什么是个人偏好的问题.

  3. 是.您可以使用任何数字类型,但枚举值必须能够适合所选类型.