1

我遇到了枚举类型初始化的问题,似乎很容易解决,但我还没有弄清楚如何去做。假设我声明了以下枚举类型:

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"];

怎么了?先感谢您。

4

2 回答 2

1

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

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

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

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

感谢所有回复,如有任何混淆,我们深表歉意。希望这可以帮助某人。

于 2010-06-16T12:35:17.737 回答
0

尝试仅使用:

typedef enum {
    NXSoundTypeNone,
    NXSoundTypeEffect,
    NXSoundTypeBackgroundMusic
} NXSoundType;

看看是否有帮助。让 typedef 和 name 相同可能会像这个人的问题一样混淆 Obj-C 编译器。

于 2010-06-15T18:03:35.930 回答