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

Jul*_*les 2 objective-c

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

h文件

typedef enum
{   eGetVarious1,
eGetVarious2,
} eGetVarious; 

- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;
Run Code Online (Sandbox Code Playgroud)

一个m文件

替代文字

jus*_*tin 5

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

实例方法:

- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;
Run Code Online (Sandbox Code Playgroud)

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

+ (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;
Run Code Online (Sandbox Code Playgroud)

假设您希望将此作为实例方法,请按以下方式声明:

    - (double)getVarious:(eGetVarious)eVar forDate:(NSDate*)pDate;
Run Code Online (Sandbox Code Playgroud)

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

double result = [self getVarious:eGetVarious1 forDate:[NSDate date]];
Run Code Online (Sandbox Code Playgroud)

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

如果它没有看到特定的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];
Run Code Online (Sandbox Code Playgroud)