use*_*470 11 objective-c switch-statement ios
我有一个像这样的开关盒:
switch ([weatherCode intValue]) {
case 1:
...
break;
case 2:
....
break;
}
Run Code Online (Sandbox Code Playgroud)
但我想在这种情况下分配一个对象,比如 NSString *string = @"hello";
但它一直给我一个错误expect expression
,我不明白发生了什么.请帮忙.
谢谢.
Xu *_*Yin 73
啊哈...
我之前遇到过同样的问题,只需{}
在你的情况下添加一个问题,你的所有问题都将得到解决.
如:
switch ([weatherCode intValue]) {
case 1:
{
...
}
break;
case 2:
{
...
}
break;
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
如果你想要初始化变量,你需要大括号:
switch ([weatherCode intValue]) {
case 1:{
NSString *string = @"hello";
}
break;
case 2: {
....
}
break;
}
Run Code Online (Sandbox Code Playgroud)
在(Objective-)C(++)的语句 while(...) { ... }
,for(...) { ... }
,switch(...) { ...}
等含有单块语句(if (...) { ... } else { ... }
包含两个)。一个块内声明的范围就是那个块,在一个块内声明同一个变量两次是错误的。
a 的块switch
包含许多case ...:
标签- 标签不分隔块,它们只是控制流可以跳转到的块内的点。这使得switch
C 中的语句与每个分支独立的其他一些语言不同(因为 anif/else
中的两个块在 C 中是独立的)。ACswitch
只是一个“计算转到”到单个块中。这就是该break;
语句存在的原因,如果没有它,控制流只会从一个“分支”继续到下一个“分支”。
这样做的另一个后果是不同的分支不能声明相同的变量名,这与 forif/else
语句不同。
最后,只能标记语句而不是声明,并且作为case ...:
标签的一种形式,不能在声明之后紧跟声明 - 因此您不能用声明开始“分支”。
如果您希望在分支中声明的变量仅在该分支中使用(就像在 an 的任何一个块中声明一样if/else
),那么您可以通过将分支括在大括号中来解决所有问题, { ... }
, 使其成为进入块语句 - 块可以被标记并且可以包含局部声明。例如:
switch (expr)
{
case 1:
{
NSString *var;
// use var
break;
}
case 2:
{
NSNumber *var;
// use var
break;
}
...
}
// no var here
Run Code Online (Sandbox Code Playgroud)
如果要分配给需要在 theswitch
之后使用的变量,则必须在 之前声明它们switch
,因为 a 的主体switch
是一个块,因此是一个局部声明范围。例如:
NSString *var = nil;
switch (expr)
{
case 1:
...
var = ...;
break;
case 2:
...
var = ...;
break;
...
}
// use var here
Run Code Online (Sandbox Code Playgroud)
HTH