Может ли целевая сигнатура метода C указать тип перечисления? - PullRequest
3 голосов
/ 16 сентября 2010

«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' . Что здесь происходит?

Ответы [ 3 ]

8 голосов
/ 16 сентября 2010

Вы не можете использовать его «голым» таким образом, не указав также, что это перечисление:

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

должно работать. Если вы хотите избежать его указания, вы можете ввести его по умолчанию:

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

тогда вы сможете использовать просто VoiceName в качестве типа аргумента.

2 голосов
/ 01 марта 2014

Начиная с 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 можно заменить любым типом, который вы определяете, тогда вы можете использовать свой метод, как указано.

1 голос
/ 16 сентября 2010

Obj-C основан на C, а не на C ++.C требует ключевого слова enum, как показал quixoto.C ++ позволяет вам его опустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...