Заявление о переключении и диапазон номеров
Есть ли способ использовать оператор 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;
}
Ответы
Ответ 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;
}
Это решит вашу проблему.