Выберите enum typedef с помощью условного оператора if-then-else - PullRequest
0 голосов
/ 09 декабря 2011

Я хотел бы использовать что-то вроде:

if (foo>0){
 typedef enum {  
   Form_FirstName = 0,
   Form_NamePrefix,
   Form_LastName,
   Form_Email,
   Form_Phone
 } Form; 
} else {
   typedef enum {
   Form_FirstName = 0,
   Form_LastName,
   Form_Phone
 } Form;
}

Можно ли это сделать?Где я должен это сделать?В .m или в .h?Я хочу использовать это для UITableView.

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

номер

Во-первых, перечисления являются конструкциями типа компиляции.

Во-вторых, у вас есть проблема с областью видимости. Потому что вы определяете тип перечисления в области действия if и else. Он не будет виден вне оператора if..else...

Вам нужно будет найти другой способ дифференциации индексации по состоянию.

Обновление на основе последующих действий ОП по вопросу:

ОК, вам нужна какая-то карта. Например, вы можете сделать:

Определите свой список.

enum {
   Form_FirstName = 0,
   Form_NamePrefix,
   Form_LastName,
   Form_Email,
   Form_Phone
};

Предполагая, что в вашем классе есть indexes ivar с обычными @property и @synthesize, настройте свои индексы:

if (foo>0) {
    self.indexes = [NSArray arrayWithObjects:[NSNumber numberWithInt:Form_FirstName],[NSNumber numberWithInt:Form_NamePrefix],[NSNumber numberWithInt:Form_LastName],[NSNumber numberWithInt:Form_Email],[NSNumber numberWithInt:Form_Phone],nil];
}
else {
    self.indexes = [NSArray arrayWithObjects:[NSNumber numberWithInt:Form_FirstName],[NSNumber numberWithInt:Form_LastName],[NSNumber numberWithInt:Form_Email],[NSNumber numberWithInt:Form_Phone],nil];
}

В других местах, когда вам нужно перевести перечисляемое поле в индекс:

NSInteger index = [self.indexes indexOfObject:[NSNumber numberWithInt:<Form Enumeration Value>]];
1 голос
/ 09 декабря 2011

gschandler правильно, вы не можете этого сделать.Технически вы можете использовать команду препроцессора

#if something
    enum
#endif

Но реальный вопрос - почему вы хотите сделать выше.Как вы думаете, что это сделает для вас?Нет ничего плохого в использовании только первого набора перечислений.Кого волнует, если вы не используете form_email?Это не приносит никакого вреда, если просто сидеть там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...