2014-03-28 51 views
1

我有下面的代码为什么NSString initWithFormat不起作用。错误“预期的表达”

NSString * myStr = [[NSString alloc] initWithFormat:@""]; 

但在Xcode我有红色惊叹号与“预期的表达”。

我已经解决了问题:

[NSString stringWithFormat:@"Number is not from 1 to 6. randomNumber is %d", randomNumber] 

但我想知道是什么问题。

图片 http://imgur.com/iICMhYc&S7QwhFT#1enter image description here

由于

+0

是的,我也一样。你可以请张贴一些代码 – morroko

+0

@Dinesh,当我评论该行一切正常,当它没有注意到,我有这个错误。我真的不明白为什么? – WebOrCode

+0

发布更多代码,因为这一行是正确的。 – Fry

回答

5

在根据Objective-C的规则,如果声明的caseswitch一个内部的对象必须以围绕所有的情况下,体括号{}

switch(randomNumber){ 
    case 1:{ 
     break; 
    } 
    default:{ 
     NSString * myStr = [[NSString alloc] initWithFormat:@""]; 
     break; 
    } 
} 
+0

这并不真正回答被问到的问题,机会是OP有一个语法错误的上面或下面这条线和Xcode放在它的错误。 – Tim

+0

所以,如果我正确地理解你。我已将{}置于默认设置中,并且错误消失了。所以这就是问题所在。任何解释为什么? – WebOrCode

+0

阅读[在switch语句中声明变量](http://stackoverflow.com/questions/1231198/declaring-variables-inside-a-switch-statement)问题是'case'是一个标签,并根据语言规则你不能把一个声明作为标签的第一行。 – Fry

1

试试这个:

default:{ 
     NSString * myStr = [[NSString alloc] initWithFormat:@""]; 
     break; 
    } 

同样与case,如果你想在交换机定义实例,添加{...}

1

除非你附上你不能在switch声明声明一个变量。

请注意,原因是switch是一个长的代码块,并且该变量似乎在其中声明,但可能不会沿所有可能的路径进行初始化。如果您在作为goto的目标标签(并注意switch只是一个正式的goto-label设置)的标签之后声明变量,则会得到相同的错误。

相关问题