Objective-C中的新枚举

11 浏览
0 Comments

Objective-C中的新枚举

在最新的工具中,现在可以使用一种新的enum

typedef enum CarType : NSUInteger {
  FourDoorCarType,
  TwoDoorCarType
} CarType;

我的问题分为几个部分:

  1. 为什么我应该使用这种方式而不是以前的方式?
  2. 为什么CarType出现了两次?我尝试跳过第一个CarType,只保留第一行为"typedef enum : NSUInteger {",看起来也能正常工作。如果有的话,有哪些缺点?
  3. 除了NSUInteger之外,还可以使用其他类型吗?
0
0 Comments

Objective-C中的新枚举引入的原因是为了解决可移植性和控制有符号与无符号的问题。可以使用任何数值类型作为枚举的基础类型,但枚举值必须能够适应所选择的基础类型。

解决方法之一是使用typedef enum _EnumName { values } EnumName;的形式来定义枚举类型,这样可以避免枚举类型本身成为已定义类型,但仍然可以使用枚举类型的别名。

在Objective-C中,以下划线开头并后跟大写字母的标识符被保留为实现使用,因此可以用't'(代表'tag')代替下划线来命名枚举类型。

至于是否允许使用浮点数/双精度数作为枚举值的基础类型,则没有明确的提及。

0
0 Comments

Objective-C中的新枚举类型是为了解决在头文件中定义枚举类型时需要包含大型头文件的问题。我们可以使用新的语法来提前声明枚举类型,从而避免在其他头文件中包含这些大型头文件。

解决方法就是使用下面的语法来提前声明枚举类型:

enum CarType : NSUInteger;

这样一来,我们就不需要在其他头文件中包含这些大型头文件了。这个新的语法给我们带来了一个很大的优势。

0
0 Comments

Objective-C中出现新的枚举类型是为了帮助开发者进行自动补全、switch语句和更好、更精确的警告等方面的操作。而宏定义的方式在这方面相对较弱。

例如,使用

typedef NS_ENUM( NSUInteger, CarType ) {
  FourDoorCarType,
  TwoDoorCarType
};

这样的宏定义方式,可以更好地处理枚举类型。当你在switch语句中只处理了FourDoorCarType这个case时,它会警告你没有处理到TwoDoorCarType等其他可能的情况。

具体如何在自动补全、switch语句和警告方面起作用,可以参考这个链接:https://stackoverflow.com/a/3190470/581190

在使用新的枚举类型时,你可以根据需要选择不同的类型,如NSInteger等。

通过这种新的枚举类型,我们可以更好地处理自动补全、switch语句和警告等操作,提高代码的可读性和健壮性。

0