将一系列值指派给一个变量
枚举数据类型的定义以关键字enum开头,之后是枚举数据类型的名称,然后是标识符序列(包含在一对花括号内),他们定义了允许给该类型指派的所有的允许值。
例如:
enum flag { false , true} 定义了一个flag类型。
要声明一个flag类型变量,仍需要用到关键字enum,之后是枚举类型的名称,最后是变量序列。例如:
enum flag endOfData,matchFound;定义了两个flag类型的变量endOfData和matchFound,能指派给这两个变量的值只有(理论上是这样)true和false。
如果希望一个枚举标识符对应一个特定的整数值,那么可以在定义数据类型时给该标识符指定整数值。例如:
enum direction { up, down,left = 10,right}; 定义了一个包含up, down,left ,right的枚举类型direction,因为up位于序列首位,所以编译器给他赋值为0,down接着up,给它赋值为1,由于left 明确指定一个整数,赋给它的值就是10,right的值由列表中前一个enum的值递增得到,因此,给它赋值11.
枚举标识符可以共享相同的值,例如:
enum boolean {no = 0,false = 0,true = 1,yes = 1};
objective c编译器实际上将枚举类标识符作为整型常量来处理。可以明确地给枚举可以给枚举类型地变量指派一个整数值,这应该使用类型转换运算符。如果不使用类型转换运算符,编译器也不会有异议。
使用枚举类型时,尽量不要依赖枚举值被作为整数这个实事。相反,尽量把它当作独立地数据类型,枚举类型提供了一种方法,使你能把整数值和有象征意义的名称对应起来。
在定义枚举类型时,允许有变化:可以省略数据类型的名称,定义该类型时,可以将变量声明为特定枚举数据类型中的一个,例如:
enum {east,west,south,north} direction;定义了一个(未命名的)枚举数据类型,它包含的值为east,west,south和north,同时还定声明了该类型的变量direction。
在代码块中定义的枚举数据类型的作用域限于块的内部。另一方面,在程序的开始及所有块之外定义的枚举数据类型对于该文件是全局的。
定义枚举数据类型时,必须确保枚举标识符域定义在相同作用域之内的变量名和其他标识符不同。