2012-09-09 3 views
1

Déplacement avec mon jeu un peu je veux ajouter des difficultés, etc.personnalisés énumérations - Type inconnu

Venir à Objective-C de C#, j'espérais que je pourrais avoir des énumérations comme celui-ci

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

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

puis quelque chose comme ceci:

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

Cependant, je reçois cette erreur suivante:

Unknown type name "GameType"/"GameDifficulty" 

Est-ce possible comme si c'était en C#?

Merci

Répondre

2

C# est l'une des pires choses à jamais arriver à C.

Votre question n'a rien à voir avec Objective-C, c'est une question simple.

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

Ce code fait plusieurs choses (dont je ne vais décrire que les plus simples). Tout d'abord, il déclare un type d'énumération, qui peut être utilisé comme enum GameTypes. Par exemple:

enum GameTypes gameType = Classic; 

En second lieu, il met ces 4 noms dans l'espace de noms global, tel que Classic, Unlimited, Timed et Expert peut être utilisé, et ne doit pas être reproduit sous forme de symboles. Troisièmement, il crée un alias de type appelé GameType qui peut être utilisé comme alias pour enum GameTypes. Par conséquent, pour votre exemple spécifique, vous ne devez pas différencier enum GameTypes et GameType. Au lieu de cela, vous devriez probablement faire quelque chose comme ceci:

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

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

puis ...

GameType gameType = GameTypeClassic; 
GameDifficulty gameDifficulty = GameDifficultyEasy; 

En outre, vous ne devez pas attribuer le premier élément comme 0 parce que le premier élément d'une énumération sera toujours obtenir 0 sauf si elle est explicitement substituée.

2

Vous semblez avoir défini les erreurs incorrectes. En C ce qui suit semble être la convention:

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

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

Même si, je bâton avec les conventions de nommage d'Apple lors de l'utilisation énumérations en Objective-C, ce qui se traduirait par quelque chose comme:

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

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

maintenant, vous serez en mesure d'attribuer des valeurs comme ceci:

GameType gameType = GameTypeClassic; 
GameDifficulty gameDifficulty = GameDifficultyEasy; 

Vérifiez comment les énumérations sont définies dans UITableView.h pour la comparaison: https://github.com/enormego/UIKit/blob/master/UITableView.h