0

只是想让您对此有所了解,我记得阅读过在switch-case语句中禁止属性声明(即case:ABC int i=0;不允许)

今天早上我遇到了一件很奇怪的事情,

以下编译

switch(var1) {
  case 1:
    NSLog(@"hello");
    float x = 0;
    view.setCenter(CGPointMake(x,100));
    break;
  ...

而以下编译

switch(var1) {
  case 1:
    float x = 0;
    view.setCenter(CGPointMake(x,100));
    break;
  ...

所以看起来如果你case用一个语句(而不是声明)开始一个表达式,它就会编译。但是当您尝试立即从变量声明开始时,它不会。

这背后的原因是什么?

编辑:决定让我的问题更清楚,NSLog 有什么区别,以便现在编译?

4

2 回答 2

4

在这里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(或其他类型)紧跟在:. 换句话说,在 之后需要一个命令:,而不是声明。

于 2013-04-17T13:08:41.420 回答
0

如果您满足以下条件,它会编译:

switch(var1) {
  case 1:
  {
    float x = 0;
    view.setCenter(CGPointMake(x,100));
  }
    break;

至于为什么要检查这个答案

于 2013-04-17T12:19:04.973 回答