继续我的游戏,我想增加困难等。
从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#中的一样吗?
由于
答案 0 :(得分:2)
C#
是C
发生过的最糟糕的事情之一。
你的问题与Objective-C无关,这是一个普通的C问题。
typedef enum GameTypes{
Classic = 0,
Unlimited,
Timed,
Expert,
} GameType;
那段代码做了几件事(我只会简单地描述一下)。首先,它声明了一个枚举类型,可以用作enum GameTypes
。例如:
enum GameTypes gameType = Classic;
其次,它将这4个名称放入全局命名空间,以便可以使用Classic
,Unlimited
,Timed
和Expert
,并且不得重复作为符号。
第三,它创建了一个名为GameType
的类型别名,可以用作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
,因为枚举的第一个元素将始终为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