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#是发生过的最糟糕的事情之一C

您的问题与 Objective-C 无关,这是一个普通的 C 问题。

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

该代码做了几件事情(我将只描述简单的事情)。首先,它声明了一个枚举类型,可以用作enum GameTypes. 例如:

enum GameTypes gameType = Classic;

其次,它将这 4 个名称放入全局命名空间中,使得ClassicUnlimitedTimed、 和Expert可以使用,并且不能作为符号重复。

第三,它创建了一个名为的类型别名GameType,可以用作enum GameTypes.

因此,对于您的具体示例,您不应区分enum GameTypesGameType。相反,您可能应该这样做:

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

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

进而...

GameType gameType = GameTypeClassic;
GameDifficulty gameDifficulty = GameDifficultyEasy;

此外,您不必分配第一个元素,0因为枚举的第一个元素将始终获取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 回答