有没有办法在目标C(在XCode中)使用带有范围的switch语句,假设是这样的:
- (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;
}
答案 0 :(得分:40)
可能适合您的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。
答案 1 :(得分:4)
不,在大多数语言中,switch语句都是常量值...你可以得到的最接近的是将这些案例流入另一个:
switch(sampleSize)
{
case 0:
case 1:
case 2:
returnStr = @"too small!";
break;
}
或者,this问题可能会有所帮助......
编辑:我只是想到了另一种方式:你可以“#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”有什么问题?
答案 2 :(得分: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,则无法计算。
答案 3 :(得分:-7)
只需在switch语句中传递true,如下面的代码
- (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;
}
这将解决您的问题