Obj-C枚举“初始化中的不兼容类型”

时间:2010-06-15 13:01:58

标签: objective-c initialization enums incompatibility

我遇到枚举类型初始化的问题似乎很容易解决,但我还没弄明白怎么做。 假设我声明了以下枚举类型:

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

我声明了一个方便的方法,用于在给定NSString对象的情况下返回其中一个NXSoundType枚举类型(注意:NXSound是一个包含名为“type”的NXSoundType属性的对象):

- (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 个答案:

答案 0 :(得分:1)

我解决了这个问题。尽管存在编译器错误消息,但问题与错误的枚举类型声明/初始化无关。问题是方法

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

被定义为基类中的私有方法,并由子类调用。这样,由于Obj-C动态特性,它应该返回id,它不能分配给NXSoundType枚举(仅限于对象)。一个简单的转换删除了问题,解决方案是将方法调用更改为:

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

感谢所有回复并抱歉任何混淆。希望这有助于某人。

答案 1 :(得分:0)

尝试使用:

typedef enum {
    NXSoundTypeNone,
    NXSoundTypeEffect,
    NXSoundTypeBackgroundMusic
} NXSoundType;

看看是否有帮助。使typedef和name相同可能会使Obj-C编译器like this person's question.

混乱