Can an objective C method signature specify an enum type?
"VoiceName" is an enum, declared like this:
enum VoiceName {
PAD_RHYTHM,
PAD_RHYTHM2,
PAD_RHYTHM3,
PEEPERS,
ATMOSPHERE,
IMPULSE,
FAST_PULSE,
HAIRYBALLS_PADS,
KICK
};
The compiler doesn't seem to like me using it in a method signature like this:
-(void)pulseFiredWithSamplePosition:(float)position from: (VoiceName) v开发者_C百科oiceName;
It tells me expected ')' before 'VoiceName'. What's going on here?
You can't use it "bare" like that without also specifying that it's an enum:
-(void)pulseFiredWithSamplePosition:(float)position from: (enum VoiceName) voiceName;
should work. If you want to avoid specifying it like that, you can typedef it:
typedef enum _VoiceName {
PAD_RHYTHM,
....
} VoiceName;
then you'll be able to use just VoiceName
as the argument type.
As of iOS6 and Mac OSX 10.8 you can use the NS_ENUM macro
typedef NS_ENUM(NSUInteger, VoiceName)
{
PAD_RHYTHM,
PAD_RHYTHM2,
PAD_RHYTHM3,
PEEPERS,
ATMOSPHERE,
IMPULSE,
FAST_PULSE,
HAIRYBALLS_PADS,
KICK
};
NSUInteger can be replaced with whatever type your defining, then you could use your method as specified.
Obj-C is based on C, not C++. C requires the enum keyword, as quixoto showed. C++ lets you omit it.
精彩评论