Как использовать enum как тип? - PullRequest
2 голосов
/ 18 ноября 2011

Скажем, внутри класса Card, вы объявили

typedef enum {
  CLUBS, DIAMONDS, HEARTS, SPADES
} Suit

и

typedef enum {
  SIX, SEVEN, EIGHT ..
} Value

и назначенный инициализатор

-(id) initWithValue: (Value) c andSuit: (Suit) s;

Как тогда вы будете использовать этот инициализатор вне класса?

Я пытался:

[Card alloc] initWithValue: (Card) Value.SIX andSuit: (Card) Suit.HEARTS];

Пожалуйста, помогите

Ответы [ 3 ]

6 голосов
/ 18 ноября 2011
Card *card = [[Card alloc] initWithValue: SIX andSuit: HEARTS];
5 голосов
/ 18 ноября 2011

Я дам расширенный ответ. Ваш код будет намного более читабельным, если вы будете следовать стандартным соглашениям об именах obj-c.

Как правило, вы должны принять для своего перечисления обычную схему именования, используя имя класса, за которым следует соответствующее имя типа, например:

typedef enum {
    CardSuitClubs,
    CardSuitDiamonds,
    CardSuitHearts,
    CardSuitSpades
} CardSuit;

typedef enum {
    CardValueTwo,
    ...,
    CardValueAce
} CardValue;

Затем вы включаете card.h там, где вам это нужно, и используете свой инициализатор следующим образом:

Card *card = [[Card alloc] initWithCardValue:CardValueAce andCardSuit:CardSuitSpades];
1 голос
/ 18 ноября 2011

Только так:

[[Card alloc] initWithValue:SIX andSuit:HEARTS];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...