Objective c 为什么’;我的枚举不能用作方法参数吗?

Objective c 为什么’;我的枚举不能用作方法参数吗?,objective-c,Objective C,我过去在方法参数中使用了typedefenum,没有问题,但今天我遇到了问题 h文件 typedef enum { eGetVarious1, eGetVarious2, } eGetVarious; - (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate; m文件 您正在调用一个类方法,并声明一个实例方法: - (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate; 实例方法: -

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

h文件

typedef enum
{   eGetVarious1,
eGetVarious2,
} eGetVarious; 

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


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

- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;
实例方法:

- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;
类方法(不能使用IVAR或实例方法):

假设要将其作为实例方法,请按如下方式声明:

    - (double)getVarious:(eGetVarious)eVar forDate:(NSDate*)pDate;
如果您在实例方法的实现范围内,那么这应该可以工作:

double result = [self getVarious:eGetVarious1 forDate:[NSDate date]];
请注意编译器报告错误的原因:

如果它没有看到某个特定的objc选择器,并且您使用了它,那么它将假定未声明的选择器的参数采用id(匿名objc对象)

此外,不应将枚举类型提升为指针(尽管
0
可以)。由于编译器无法匹配您调用的内容:
[objc_class*getvariable:eGetVarious:NSDate*]
这是正确的,因为您应该将其称为:

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

@朱尔斯:虽然他没有明确提到,但请注意,贾斯汀已经将最低位参数之前的空冒号替换为“forDate:”。尽管裸冒号是合法的,但您几乎永远不会看到它被使用,因为它的可读性远不如描述参数。