为什么我的枚举不能用作方法参数?

时间:2010-10-27 06:51:58

标签: objective-c

过去我使用typedef enum方法参数并没有问题,但今天我遇到了问题......

h file

typedef enum
{   eGetVarious1,
eGetVarious2,
} eGetVarious; 

- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;

m文件

alt text

1 个答案:

答案 0 :(得分:5)

你正在调用一个类方法,并声明一个实例方法:

实例方法:

- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;

类方法(可能不使用ivars或实例方法):

+ (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;

说你想把它作为一个实例方法,声明如下:

    - (double)getVarious:(eGetVarious)eVar forDate:(NSDate*)pDate;

如果你在实例方法的实现范围内,那么这应该有效:

double result = [self getVarious:eGetVarious1 forDate:[NSDate date]];

请注意编译器报告错误的原因:

如果它没有看到特定的objc选择器并且你使用它,它假定未声明的选择器的参数采用id(匿名objc对象)。

另外,不应将枚举类型提升为指针(尽管0可以)。因为编译器没有办法匹配你正在调用的内容:[objc_class* getVarious:eGetVarious<enum_type> :NSDate*]它是对的,因为你应该把它称为:

General * anInstanceOfGeneral = /* something here */;
NSDate * date = /* something here */;
double result = [anInstanceOfGeneral getVarious:eGetVarious1 forDate:date];