1

簡単に解決できるように見える列挙型の初期化に問題がありますが、その方法がわかりません。次の列挙型を宣言するとします。

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

次のような NSString オブジェクトを指定して、NXSoundType 列挙型の 1 つを返す便利なメソッドを宣言します (注: 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 に答える