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。