我可以在Objective中声明变量吗?

我想我会失明,因为我无法弄清楚这段代码中的语法错误:

if( cell == nil ) {
    titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
        reuseIdentifier:CellIdentifier ] autorelease
    ];

    switch( cellNumber ) {
        case 1:
            NSString *viewDataKey = @"Name";
etc...

当我尝试编译它时,在最后一行的'*'标记之前出现错误:语法错误。

对不起,这是一个基本的问题,但我错过了什么?


我手边没有合适的Objective-C编译器,但只要C构造是相同的:

switch { … }为您提供了一个块级作用域,而不是每个case 。 在范围的开头以外的任何地方声明一个变量是非法的,并且在switch内部是特别危险的,因为它的初始化可能会被跳过。

以下任一解决方案可以解决问题?

NSString *viewDataKey;
switch (cellNumber) {
    case 1:
        viewDataKey = @"Name";
    …
}

switch (cellNumber) {
    case 1: {
        NSString *viewDataKey = @"Name";
        …
    }
    …
}

您不能在case语句的开头声明一个变量。 制作一个测试用例,并且你会得到相同的错误。

它不需要在块中间声明变量 - 即使采用了一个标准,它不会让GCC在案例开始时接受声明。 看来GCC将案例标签看作是该行的一部分,因此不会在那里进行声明。

一个简单的解决方法就是在案例的开始处放一个分号,这样声明就不在开始。


在C中,只能在任何非声明语句之前的块的开头声明变量。

{
   /* you can declare variables here */

   /* block statements */

   /* You can't declare variables here */
}

在C ++中,你可以在任何需要它们的地方声明变量。

链接地址: http://www.djcxy.com/p/14759.html

上一篇: Can I declare variables inside an Objective

下一篇: Select all the text in an input, focusin