目标C方法签名是否可以指定枚举类型?

时间:2010-09-16 01:44:54

标签: objective-c

“VoiceName”是一个枚举,声明如下:

enum VoiceName {
 PAD_RHYTHM,
 PAD_RHYTHM2,
 PAD_RHYTHM3,
 PEEPERS,
 ATMOSPHERE,
 IMPULSE,
 FAST_PULSE,
 HAIRYBALLS_PADS,
 KICK
};

编译器似乎不喜欢我在这样的方法签名中使用它:

-(void)pulseFiredWithSamplePosition:(float)position from: (VoiceName) voiceName;

它在'VoiceName'之前告诉我 expect')'。这是怎么回事?

3 个答案:

答案 0 :(得分:8)

如果没有指定它是枚举:

,你不能像那样“裸”使用它
-(void)pulseFiredWithSamplePosition:(float)position from: (enum VoiceName) voiceName;

应该有效。如果你想避免像那样指定它,你可以输入def it:

typedef enum _VoiceName {
    PAD_RHYTHM,
    ....
} VoiceName;

然后你就可以只使用VoiceName作为参数类型。

答案 1 :(得分:2)

从iOS6和Mac OSX 10.8开始,您可以使用NS_ENUM宏

typedef NS_ENUM(NSUInteger, VoiceName)
{
 PAD_RHYTHM,
 PAD_RHYTHM2,
 PAD_RHYTHM3,
 PEEPERS,
 ATMOSPHERE,
 IMPULSE,
 FAST_PULSE,
 HAIRYBALLS_PADS,
 KICK
};

NSUInteger可以替换为您定义的任何类型,然后您可以使用您指定的方法。

答案 2 :(得分:1)

Obj-C基于C,而不是C ++。如quixoto所示,C需要enum关键字。 C ++允许你省略它。