我遇到枚举类型初始化的问题似乎很容易解决,但我还没弄明白怎么做。 假设我声明了以下枚举类型:
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"];
怎么了? 提前谢谢。
答案 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.
混乱