morgancodes
morgancodes

Reputation: 25265

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) voiceName;

It tells me expected ')' before 'VoiceName'. What's going on here?

Upvotes: 3

Views: 3448

Answers (3)

Cory
Cory

Reputation: 2312

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.

Upvotes: 2

Graham Perks
Graham Perks

Reputation: 23398

Obj-C is based on C, not C++. C requires the enum keyword, as quixoto showed. C++ lets you omit it.

Upvotes: 1

Ben Zotto
Ben Zotto

Reputation: 71048

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.

Upvotes: 8

Related Questions