Ошибка Obj-C: ожидаемое выражение перед ...... (почему?) - PullRequest
2 голосов
/ 07 апреля 2010

Привет, у меня есть enum, объявленный так:

typedef enum {
    Top,             
    Bottom,
    Center
} UIItemAlignment;

В своем коде я пытаюсь использовать его так:

item.alignment = UIItemAlignment.Top;

Я получаю сообщение об ошибке: «Ожидаемое выражение перед UIItemAlignment»

Если я использую только:

item.alignment = Top;

все работает нормально, но почему я получаю эту ошибку, если пытаюсь использовать ее по-другому?

_alignment является NSInteger и имеет свойство, объявленное как это

@property (readwrite) NSInteger alignment; и я синтезировал его в своем файле реализации.

Итак, мой вопрос: почему я получаю эту ошибку?

Ответы [ 3 ]

5 голосов
/ 07 апреля 2010

Значения перечисления не указываются через их тип в Objective-C и C ++. Синтаксис, который вы пытаетесь использовать, - это то, как C # справляется с этим.

1 голос
/ 07 апреля 2010

Значения, объявленные внутри enum { }, сами по себе являются целочисленными константами и не связаны с типом перечисления. Они используются в качестве int значений, аналогичных #define d константам. Кроме того, вы можете использовать тип enum (например, UIItemAlignment здесь) в качестве типа целочисленной переменной, которая гарантированно сможет представлять константы перечисления, но сам тип не является классом или структурой, содержащей эти константы - следовательно . не работает.

1 голос
/ 07 апреля 2010

Чтобы указать значение перечисления, вам не нужно указывать его тип. Чтобы быть более понятным, вы можете написать что-то вроде этого:

UIItemAlignment alignment = Top;
item.alignment = alignment;

Но это не обязательно.

...