Заявление о распределении и диапазон номеров - PullRequest
14 голосов
/ 18 ноября 2011

Есть ли способ использовать оператор switch с диапазонами в Objective C (в XCode), гипотетически что-то вроде этого:

- (NSString *)evaluate:(NSInteger)sampleSize
{
       NSString returnStr;
       switch (sampleSize)
           {
               case sampleSize < 10: 
               returnStr = @"too small!";
               break;

               case sampleSize >11 && sampleSize <50:
               returnStr = @"appropriate";
               break;

               case sampleSize >50:
               returnStr = @"too big!";
               break;
           }
       return returnStr;
}

Ответы [ 4 ]

40 голосов
/ 18 ноября 2011

Существует расширение GCC (которое, я полагаю, поддерживается в Clang), которое может подойти для вас. Позволяет использовать диапазоны в операторах case. Полная документация на http://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Case-Ranges.html#Case-Ranges - пример заявления с этой страницы:

case 1 ... 5:

, что соответствует (неудивительно) 1, 2, 3, 4 или 5.

4 голосов
/ 18 ноября 2011

Нет, операторы switch предназначены для константных значений в большинстве языков ... Самое близкое, что вы можете получить, - это передать дела друг в друга следующим образом:

switch(sampleSize)
{
    case 0:
    case 1:
    case 2:
        returnStr = @"too small!";
        break;
}

В качестве альтернативы это Вопрос может помочь ...

РЕДАКТИРОВАТЬ: Я просто подумал о другом способе: вы можете "#define" этот большой список дел в файле .h, как это:

#define TOO_LOW     case 0: \
                    case 1: \
                    case 2: \
                    case 3:

и затем используйте его в переключателе следующим образом:

switch(sampleSize)
{
    TOO_LOW
        returnStr = @"too small!";
        break;
}

Конечно, это не самое чистое решение. Что не так с 3 "если / еще"?

3 голосов
/ 18 июля 2015
- (NSString *)evaluate:(NSInteger)sampleSize
{
       NSString returnStr;
       switch (sampleSize)
           {

    //    for sampleSize between 0 and 10

               case 0 ... 10: 
               returnStr = @"too small!";
               break;

    //    for sampleSize between 11 and 50

               case 11 ... 50:
               returnStr = @"appropriate";
               break;

    //    for sampleSize above 50

               case 50 :
               case default:
               returnStr = @"too big!";
               break;
           }
       return returnStr;
}

Обратите внимание: это решение, которое я разработал, но оно не будет учитываться, если sampleSize имеет значение h меньше 0.

0 голосов
/ 27 декабря 2012

Просто введите true в своем выражении switch, как показано ниже: код

- (NSString *)evaluate:(NSInteger)sampleSize {
   NSString returnStr;
   switch (true)
       {
           case sampleSize < 10: 
           returnStr = @"too small!";
           break;

           case sampleSize >11 && sampleSize <50:
           returnStr = @"appropriate";
           break;

           case sampleSize >50:
           returnStr = @"too big!";
           break;
       }
   return returnStr;

}

Это решит вашу проблему

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