Подтвердить что ты не робот

Заявление о переключении и диапазон номеров

Есть ли способ использовать оператор 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;
}
4b9b3361

Ответ 1

Существует расширение 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.

Ответ 2

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

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

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

EDIT: Я просто подумал о другом: вы можете "#define" этот большой список случаев в файле .h следующим образом:

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

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

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

Конечно, это не самое чистое решение. Что случилось с 3 "if/else's"?

Ответ 3

- (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.

Ответ 4

Просто передайте 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;

}

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