自定义枚举 - 未知类型

时间:2012-09-09 13:32:28

标签: objective-c enums

继续我的游戏,我想增加困难等。

从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#中的一样吗?

由于

2 个答案:

答案 0 :(得分:2)

C#C发生过的最糟糕的事情之一。

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

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

那段代码做了几件事(我只会简单地描述一下)。首先,它声明了一个枚举类型,可以用作enum GameTypes。例如:

enum GameTypes gameType = Classic;

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

第三,它创建了一个名为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,除非它被明确覆盖。

答案 1 :(得分: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