过去我使用typedef
enum
方法参数并没有问题,但今天我遇到了问题......
h file
typedef enum
{ eGetVarious1,
eGetVarious2,
} eGetVarious;
- (double)getVarious:(eGetVarious)eVar:(NSDate*)pDate;
m文件
答案 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];