我可以在Objective-C switch语句中声明variables吗?
我想我会失明,因为我无法弄清楚这个代码中的语法错误:
if( cell == nil ) { titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier ] autorelease ]; switch( cellNumber ) { case 1: NSString *viewDataKey = @"Name"; etc...
当我尝试编译它时,我在最后一行的'*'标记之前得到一个错误:语法错误 。
对不起,这样一个基本的问题,但我错过了什么?
我手边没有合适的Objective-C编译器,但是只要C结构是相同的:
switch { … }
给你一个块级别的范围,而不是每个case
。 在范围的开头以外的地方声明一个variables是非法的,而且在switch
内部是特别危险的,因为它的初始化可能被跳过。
以下任何一项解决了这个问题?
NSString *viewDataKey; switch (cellNumber) { case 1: viewDataKey = @"Name"; … } switch (cellNumber) { case 1: { NSString *viewDataKey = @"Name"; … } … }
您不能在case语句的开头声明一个variables。 做一个testing用例就是这个,你会得到同样的错误。
它并不需要在块中间声明variables – 即使采用了一个标准,它不会让GCC在一个case语句开始时接受一个声明。 看来,GCC将案件标签视为该行的一部分,因此不会在那里发表声明。
一个简单的解决方法就是在案例的开始处放一个分号,所以声明不在开头。
在C中,只能在任何非声明语句之前的块的开头声明variables。
{ /* you can declare variables here */ /* block statements */ /* You can't declare variables here */ }
在C ++中,你可以在需要的地方声明variables。
在开关块中声明一个variables可能不合适吗?
您可以在switch语句中创build一个variables,但是您必须在一个块中创build它,以便定义该variables的范围。
例:
switch(number){ case 1: { // Create object here // object is defined only for the scope of this block } break; case 2: { // etc. } break; default: break; }
如何解决警告:
1.插入一个;
在你的情况块的第一行
2.在大括号内编码