Переключение с типом перечисления typedef из строки - PullRequest
2 голосов
/ 09 августа 2010

Я пытаюсь получить значение из строки, которая принадлежит enum typedef в Obj C, но я не могу получить значение из строки NSString.Я делаю что-то вроде этого:

typedef enum{
    S,
    M,
    L
} Size;

-(void)function:(NSString *)var{
Size value=[var value];
swicth(value){
  case S:...
  case M:...
  ...
 }
}

РЕДАКТИРОВАТЬ: содержимое строки будет что-то вроде @ "S" @ "M" @ "L"

Я непосмотрим, как мне это сделать.

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Предполагая, что вы знаете, что строки имеют длину 1, вы можете включить unichar в позиции 0.

switch ([string characterAtIndex:0]) {
case 'S': ...
case 'L': ...
case 'M': ...
}
0 голосов
/ 09 августа 2010

Не ясно, что содержит строка.Это @"S", @"M" или @"L"?Если это так, вам нужно обеспечить собственное преобразование в значения перечисления Size.Или вы можете просто использовать сравнение строк в вашем методе:

if ([var isEqualToString: @"S"]) {
  // ...
} else if ([var isEqualToString: @"M"]) {
  //...
} ...

Однако, если строка содержит числовое значение одной из Size записей (например, @"0", @"1" или @"2") вы можете использовать метод -intValue, чтобы выполнить сравнение, которое вы написали в вопросе.

...