Object-C: 枚举

摘自:http://coffeeandsandwich.com/?p=8

在 iOS 6 和 Mac OS X 10.8 以前,定义枚举类型的方式如下:

1

2

3

4

5

typedef enum the_enum_name{

value_1,

value_2,

value_3

}the_enum_type_name;

注意:
1.  the_enum_name 和 the_enum_type_name 可以是一样的。
2. 你甚至可以不写 the_enum_name,只写 the_enum_type_name。

从iOS6和Mac OS X 10.8开始,苹果允许你使用新的方式来定义枚举类型

1

2

3

4

5

typedef NS_ENUM(NSInteger, the_enum_type_name){

value_1,

value_2,

value_3

};

NS_ENUM 的第一个参数用来声明枚举值们所属的类型,只能是整形数值类型,一般都是用NSInteger就可以了。第二个参数是枚举类型的名字。

那么这两者有什么差别呢?实际上差别不大,不过后者更直观,而且 NS_ENUM 第二个参数则直接取代了前者的 the_enum_name 和 the_enum_type_name。

另外,枚举类型还能进行位运算。你可以使用 | 进行或运算或者 & 进行与运算。不过需要用 NS_OPTIONS  来定义,例如iOS里有个 UIViewAutoresizing  的枚举类型,它的定义就是下面这样子的:

1

2

3

4

5

6

7

8

9

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {

UIViewAutoresizingNone                 = 0,

UIViewAutoresizingFlexibleLeftMargin = 1 << 0,

UIViewAutoresizingFlexibleWidth = 1 << 1,

UIViewAutoresizingFlexibleRightMargin = 1 << 2,

UIViewAutoresizingFlexibleTopMargin = 1 << 3,

UIViewAutoresizingFlexibleHeight = 1 << 4,

UIViewAutoresizingFlexibleBottomMargin = 1 << 5

};

这个枚举类型是用来指定当控件的容器(比如说窗口)的大小发生变化时,控件的大小和位置应当如何变化,如果希望这个控件的宽度不变,只改变左右边距,那么可以这样负值:

1

someButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;

参考:

What is a typedef enum in Objective-C?
http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c

NS_ENUM & NS_OPTIONS
http://nshipster.com/ns_enum-ns_options/

时间: 2024-10-12 06:51:14

Object-C: 枚举的相关文章

关于Object.defineProperty 的基础知识

Object.defineProperty 这个方法大家耳熟能详,可以对 对象的属性进行添加或修改的操作.即可以进行  数据劫持 .vue就是通过这个方法来劫持数据的. 平时我们创建对象的时候,一般通过对象字面量的方式创建: var student = { name:"小明", age:10 } 对象的属性在创建的时候,都带有一些特征值(特性),JS通过这些特征值来定义它们的行为. ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(propert

java新特性上

jdk5.0以及5.0之后的版本: 静态导入 自动装箱和拆箱 增强for循环 可变参数 枚举类型 泛型 反射 内省 元数据 静态导入 package java静态导入; import static java.lang.System.out; //用的不多,可阅读性下降 import org.junit.Test; public class Demo { @Test public void test(){ out.print("静态导入测试"); } } 可变参数 package 可变参

NSArray 常用方法

NSMutableArray *MutableArray = [NSMutableArray alloc] arrayWithArray:array] //创建可变数组(从现有的数组上建立) [MutableArray removeObjectAtIndex:1] //删除数组中指定位置的的元素 [MutableArray replaceObjectAtIndex:1 withObject:@"tihuan"] //在相应位置 for(NSString *string in Mutab

JavaScript中两种类型的全局对象/函数

这里所说的JavaScript指浏览器环境中的包括宿主环境在内的. 第一种是ECMAScript Global Object,第二种是宿主环境(Host)下的全局对象/函数. 一.核心JavaScript内置对象,即ECMAScript实现提供的不依赖于宿主环境的对象 这些对象在程序执行之前就已经(实例化)存在了.ECMAScript称为The Global Object,分为以下几种 1, 值属性的全局对象(Value Properties of the Global Object).有NaN

NSString常用方法

//一.NSString //1.创建常量字符串.NSString *astring = @"This is a String!"; //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; [astring release]; NSLog(@"astring:%@",astring);// NSString *ast

iOS开发常识

一.NSString 创建字符串.  NSString *astring = @"This is a String!"; 创建空字符串,给予赋值.  NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; NSLog(@"astring:%@",astring); string release]; 使用变量初始化  NSString *name = 

黑马程序员——JAVA学习笔记十二(高新技术一)

 1,    静态导入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.solaire.enhance; import static java.lang.Math.max;  //import   语句可以导入一个类或某个包中的所有类 //import static  静态导入 JDK5以后才有.语句导入一个类中的某个静态方法或所有静态方法 //无名包和有包名中的类在一起,没有package,则为无名包. //一个类

NSString 用法大全。

一.NSString 创建字符串.  NSString *astring = @"This is a String!"; 创建空字符串,给予赋值.  NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; NSLog(@"astring:%@",astring); string release]; 使用变量初始化  NSString *name = 

《Inside C#》笔记(七) Attribute

Attribute特性可以说是具有开创新的意义,因为一般的语言在被设计出来后,它所具有的能力就已经固定了.而借助Attribute特性,我们可以为C#已有的类型附加信息,既可以在编程时(design-time)附加(如代码描述).也可以附加运行时(run-time)信息(如数据库字段映射).还可以使用Attribute控制代码的行为(如权限检查).Attribute可以提供无限的可能. 一 Attribute的声明 在使用Attribute标签之前,首先要定义它 上面的代码就是Attribute

IOS数组

/*******************************************************************************************NSArray /*---------------------------创建数组------------------------------*///NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@&qu