开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜