使用枚举和宏都可以使得程序简洁和易于修改。但在以下情况枚举是优于宏的:
当变量多的时候,枚举比宏更加容易修改,而且枚举的格式和多个宏定义相比更加易读。
在类型安全方面,枚举是类型安全的,宏定义不是类型安全的。例如:
#define RETURN_SUCCESS 0
#define TIME_OUT 1
#define UNKONWN 2
在超出这3中状态外,程序因匹配不到可能发生错误。
在ios中的枚举一般有两种形式
typedef NS_ENUM (NSInteger, ReturnType) {
ReturnSuccess = 0,
TimeOut = 1,
Unknown = 2
};
//除了上面的,还提供了方便进行位运算的枚举值 .可以将多种情况用一个变量表示,推荐使用。 (<<是左移运算符)
//通过位运算直接操控二进制,可以节约内存,加快程序。
typedef NS_OPTIONS (NSInteger, ReturnType) {
ReturnSuccess = 0, // 0
NoNetwork = 1 << 1, // 10 2
Unknown = 1 << 2, // 100 4
NoService = 1 << 3 // 1000 8
};
我们可以对枚举值直接使用位运算符
1. 将 TimeOut 和 Unknown 两种情况 归到一起 (按位或 | )
ReturnType FallingWood = Unknown | TimeOut; // 100 | 001 101 5
2. 将对应的情况取出来 (按位与 &)
if (FallingWood & TimeOut) {
NSLog(@"出错的情况中可能包括超时");
}