我有一个像这样的开关盒:
switch ([weatherCode intValue]) {
case 1:
...
break;
case 2:
....
break;
}
但是我希望在这种情况下分配一个对象,比如NSString *string = @"hello";
但是它一直给我一个错误expect expression
我根本不明白发生了什么。请帮忙。
感谢。
答案 0 :(得分:71)
... AHA
之前我遇到过同样的问题,只需在你的情况下添加一个{}
,你的所有问题都将得到解决。
如:
switch ([weatherCode intValue]) {
case 1:
{
...
}
break;
case 2:
{
...
}
break;
}
希望有所帮助。
答案 1 :(得分:7)
如果你想要初始化变量,你需要大括号:
switch ([weatherCode intValue]) {
case 1:{
NSString *string = @"hello";
}
break;
case 2: {
....
}
break;
}
答案 2 :(得分:3)
尝试这样做:
switch ([weatherCode intValue]) {
case 1: {
...
}
break;
case 2: {
....
}
break;
...
}
答案 3 :(得分:3)
在(目标 - )C(++)中,语句 while(...) { ... }
,for(...) { ... }
,switch(...) { ...}
等包含一个块语句< / em>(if (...) { ... } else { ... }
包含两个)。块中声明的范围就是那个块,在块中声明两次相同的变量是错误的。
switch
的块包含许多case ...:
标签 - 标签不会分隔块,它们只是控制流可以跳转到的块内的点。这使得C中的switch
语句与每个分支独立的其他语言中的if/else
语句不同(因为switch
中的两个块在C中是独立的)。 C break;
只是一个&#34;计算的转到&#34;成一个块。这就是if/else
语句存在的原因,如果没有它,控制流只会从一个&#34;分支继续进行。到下一个。
另一个结果是,与case ...:
语句不同,不同的分支不能声明相同的变量名。
最后只能标记语句而不是声明,并且由于if/else
是一种标签形式,因此不能立即跟随一个声明 - 所以你无法启动&#34;分支&#34;声明。
如果您希望在分支中声明的变量仅用于该分支(如果在{ ... }
的任一块中声明它们),那么您可以通过封闭所有问题来解决所有问题大括号switch (expr)
{
case 1:
{
NSString *var;
// use var
break;
}
case 2:
{
NSNumber *var;
// use var
break;
}
...
}
// no var here
中的分支,使其成为块语句 - 可以标记块,并且可以包含本地声明。例如。类似的东西:
switch
如果要分配在switch
之后需要使用的变量,则必须在switch
之前声明它们,因为NSString *var = nil;
switch (expr)
{
case 1:
...
var = ...;
break;
case 2:
...
var = ...;
break;
...
}
// use var here
的主体是块,因此地方申报范围。例如。类似的东西:
{{1}}
HTH
答案 4 :(得分:2)
使用一些大括号:
switch ([weatherCode intValue]) {
case 1:{
NSString *string = @"hello";
}
break;
case 2:{
NSString *string = @"hello";
}
break;
}
答案 5 :(得分:1)
在交换机中,大小写就像阻塞一样,因此您可能需要设置{}。如果使用ARC,则不需要显式分配NSString。
switch ([weatherCode intValue]) {
case 1:
{
//your code for case 1
}
break;
case 2:
{
//your code for case 2
}
break;
}