2012-09-09 133 views
1

移動與我的比賽一點我想補充的困難等自定義枚舉 - 未知類型

來到Objective-C的從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

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

2

你似乎已經定義了錯誤的枚舉。在C以下似乎是慣例:

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

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

即使是這樣,我會與蘋果的命名約定使用Objective-C的枚舉時堅持,這將導致類似:

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