我想回想一下,我记得在switch-case
语句中禁止使用属性声明(即不允许case:ABC int i=0;
)
今天早上我发现了一些比较奇怪的东西,
以下编译
switch(var1) {
case 1:
NSLog(@"hello");
float x = 0;
view.setCenter(CGPointMake(x,100));
break;
...
而以下 NOT 编译
switch(var1) {
case 1:
float x = 0;
view.setCenter(CGPointMake(x,100));
break;
...
因此,如果您使用语句(而非声明)启动case
表达式,它就会编译。但是当你尝试使用变量声明立即开始时,它不会。
这背后的理由是什么?
编辑: 决定让我的问题更清楚, NSLog有什么区别以便现在编译?
答案 0 :(得分:3)
NSLog
在这里没有什么区别。正是;
正在发挥作用:
switch(var1) {
case 1:
;
float x = 0;
view.setCenter(CGPointMake(x,100));
break;
编译。甚至
switch(var1) {
case 1:;
float x = 0;
view.setCenter(CGPointMake(x,100));
break;
在float
之后不能编译的是:
(或其他类型)。换句话说,在:
之后,预期命令,而不是声明。
答案 1 :(得分:0)
如果您执行编译:
switch(var1) {
case 1:
{
float x = 0;
view.setCenter(CGPointMake(x,100));
}
break;
至于检查this answer的原因。