1

ゲームを少し進めて、難易度などを追加したいと思います。

C# から Objective-C に移行したとき、このような列挙型ができることを望んでいました

typedef enum GameTypes{
    Classic = 0,
    Unlimited,
    Timed,
    Expert,
} GameType;

typedef enum GameDifficultys
{
    Easy = 0,
    Medium,
    Hard,
} GameDifficulty;

そして、次のようなものがあります:

GameType gameType = GameTypes.Classic;
GameDifficulty gameDifficulty = GameDifficultys.Easy;

ただし、次のエラーが表示されます。

Unknown type name "GameType"/"GameDifficulty"

これはC#のように可能ですか?

ありがとう

4

2 に答える 2

2

C#史上最悪の出来事の1つですC

あなたの質問はObjective-Cとは何の関係もありません。それは単純なCの質問です。

typedef enum GameTypes{
    Classic = 0,
    Unlimited,
    Timed,
    Expert,
} GameType;

このコードはいくつかのことを行います (簡単なものだけを説明します)。まず、として使用できる列挙型を宣言しますenum GameTypes。例えば:

enum GameTypes gameType = Classic;

次に、これら 4 つの名前をグローバル名前空間に配置します。これにより、、、、およびが使用可能になりClassic、シンボルとして複製されてはなりません。UnlimitedTimedExpert

GameType3 番目に、のエイリアスとして使用できるという型エイリアスを作成しenum GameTypesます。

したがって、特定の例では、 と を区別enum GameTypesしないでくださいGameType。代わりに、おそらく次のようにする必要があります。

typedef enum GameType {
    GameTypeClassic = 0,
    GameTypeUnlimited,
    GameTypeTimed,
    GameTypeExpert,
} GameType;

typedef enum GameDifficulty
{
    GameDifficultyEasy = 0,
    GameDifficultyMedium,
    GameDifficultyHard,
} GameDifficulty;

その後...

GameType gameType = GameTypeClassic;
GameDifficulty gameDifficulty = GameDifficultyEasy;

また、明示的にオーバーライドされない限り0、列挙の最初の要素は常に取得されるため、最初の要素を as として割り当てる必要はありません。0

于 2012-09-09T13:42:17.250 に答える
2

列挙型を間違って定義したようです。Cでは、以下が慣例のようです:

typedef enum {
    Classic = 0,
    Unlimited,
    Timed,
    Expert,
} GameTypes;

typedef enum
{
    Easy = 0,
    Medium,
    Hard,
} GameDifficulties;

それでも、Objective-C で列挙型を使用する場合は、次のような結果になる Apple の命名規則に固執します。

typedef enum {
    GameTypeClassic = 0,
    GameTypeUnlimited,
    GameTypeTimed,
    GameTypeExpert,
} GameType;

typedef enum
{
    GameDifficultyEasy = 0,
    GameDifficultyMedium,
    GameDifficultyHard,
} GameDifficulty;

これで、次のように値を割り当てることができます。

GameType gameType = GameTypeClassic;
GameDifficulty gameDifficulty = GameDifficultyEasy;

比較のために、列挙型が UITableView.h でどのように定義されているかを確認してください: https://github.com/enormego/UIKit/blob/master/UITableView.h

于 2012-09-09T13:45:31.533 に答える