Перечисление Obj-C "Несовместимые типы в инициализации" - PullRequest
1 голос
/ 15 июня 2010

У меня проблема с инициализацией типа enum, которая кажется простой для решения, но я не выяснил, как это сделать. Предположим, я объявил следующий тип перечисления:

typedef enum NXSoundType {
    NXSoundTypeNone,
    NXSoundTypeEffect,
    NXSoundTypeBackgroundMusic
} NXSoundType;

Я объявляю удобный метод для возврата одного из типов перечисления NXSoundType с данным объектом NSString, как этот (ПРИМЕЧАНИЕ: NXSound является объектом, который содержит атрибут NXSoundType с именем "type"):

- (NXSoundType)nxSoundTypeFromIdentifier:(NSString*)nxSoundIdentifier {
    NXSoundType type = NXSoundTypeNone;

    for (NXSound *nxSound in self.nxSounds) {
        if ([nxSound.identifier isEqualToString:nxSoundIdentifier]) {
            type = nxSound.type;
        }
    }    
    return type;
}

Пока все хорошо. Но следующий вызов не работает:

NXSoundType type = [self nxSoundTypeFromIdentifier:@"kNXTargetGameSoundIdEffectTic"];

Что не так? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 16 июня 2010

Я решил проблему. Несмотря на сообщение об ошибке компилятора, проблема не была связана с неправильным объявлением / инициализацией типа enum. Проблема заключалась в том, что метод

- (NXSoundType)nxSoundTypeFromIdentifier:(NSString*)nxSoundIdentifier;

был определен как закрытый метод в базовом классе и был вызван подклассом. Таким образом, из-за динамической природы Obj-C ожидалось, что он вернет id, который нельзя присвоить перечислению NXSoundType (только объектам). Простое приведение сняло проблему, решение состояло в том, чтобы изменить вызов метода на:

NXSoundType type = (NXSoundType)[self nxSoundTypeFromIdentifier:@"kNXTargetGameSoundIdEffectTic"];

Ценю все ответы и извиняюсь за путаницу. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 15 июня 2010

Попробуйте использовать просто:

typedef enum {
    NXSoundTypeNone,
    NXSoundTypeEffect,
    NXSoundTypeBackgroundMusic
} NXSoundType;

и посмотрим, поможет ли это. наличие одинаковых typedef и name может сбить с толку компилятор Obj-C , как вопрос этого человека.

...