JoB*_*324 57 objective-c switch-statement
我想我会失明,因为我无法弄清楚此代码中语法错误的位置:
if( cell == nil ) {
titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
reuseIdentifier:CellIdentifier ] autorelease
];
switch( cellNumber ) {
case 1:
NSString *viewDataKey = @"Name";
etc...
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我在最后一行的'*'标记之前收到错误:语法错误.
对不起这个基本问题,但我错过了什么?
eph*_*ent 69
我手边没有合适的Objective-C编译器,但只要C构造相同:
switch { … }为您提供一个块级范围,而不是每个范围case.在范围的开头以外的任何地方声明变量是非法的,并且在a switch内特别危险,因为它的初始化可能会被跳过.
请执行以下任一方法解决问题?
NSString *viewDataKey;
switch (cellNumber) {
case 1:
viewDataKey = @"Name";
…
}
switch (cellNumber) {
case 1: {
NSString *viewDataKey = @"Name";
…
}
…
}
Run Code Online (Sandbox Code Playgroud)
Chu*_*uck 20
您不能在case语句的开头声明变量.制作一个仅包含该测试用例的测试用例,您将得到相同的错误.
它与在块中间声明的变量无关 - 即使采用允许GCC在case语句开头接受声明的标准也是如此.看来GCC将案例标签视为该行的一部分,因此不允许在那里进行声明.
一个简单的解决方法就是在案例的开头添加一个分号,因此声明不在开头.
| 归档时间: |
|
| 查看次数: |
20097 次 |
| 最近记录: |