10.5 typedef语句
Objective-C提供了一种能力:编程者可以为数据类型另外指派一个名称。这是通过所谓的typedef语句实现的。语句
typedef int Counter;
定义名称Counter等价于Objective-C数据类型int。随后的变量就可以声明为Counter类型,如在以下语句中:
Counter j, n;
Objective-C编译器实际上是将变量j和n的声明当作前面显示的普通整型变量。在这种情况下使用typedef语句的主要好处是增加了变量定义的可读性。从j和n的定义中就可以清晰地看出这些变量在程序中的使用目的。用传统方式将变量定义为int类型不能很清晰地表示出它们的用途。
下面的typedef将一个名为NumberObject的类型定义为Number对象:
typedef Number*NumberObject;
随后将一些变量声明为NumberObject类型,如在语句
NumberObject myValue1,myValue2,myResult;
中,它们的使用方式和以常规方式在程序中声明一样,如下所示:
NumbermyValue1,myValue2,*myResult;
使用typedef定义一个新类型名,按照下面的步骤:
1.像声明所需类型的变量那样编写一条语句。
2.在通常应该出现声明的变量名的地方,将其替换为新的类型名。
3.在语句的前面加上关键字typedef。
作为这个过程的例子,定义一个名为Direction的枚举数据类型,它包含4个方向:东、南、西和北。写出枚举类型的声明,在通常出现变量名称的地方使用名称Direction替代。在开始其他工作之前,在语句前加上关键字typedef:
typedef enum{east, west, south, north}Direction;
将typedef放在合适的位置之后,就可以声明Direction类型的变量了,如以下语句所示:
Direction step1,step2;
Foundation框架在它的一个头文件中使用typedef对NSComparisonResult进行了如下定义:
enum_NSComparisonResult{
NSOrderedAscending=-1,NSOrderedSame, NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
Foundation框架中一些用于比较的方法会返回一个该类型的值。例如,Foundation的字符串比较方法名为compare:,它在完成两个NSString对象字符串的比较之后返回一个NSComparison-Result类型的值。该方法的声明如下所示:
-(NSComparisonResult)compare:(NSString*)string;
要测试两个名为userName和savedName的NSString对象是否相等,可以在程序里编写以下代码行:
If([userName compare:savedName]==NSOrderedSame){
//The names match
……
}
这实际上测试compare:方法的返回值是否为0。