在Objective-C中切换语句和实例变量分配

Jus*_*tin 9 cocoa cocoa-touch objective-c switch-statement ios

我似乎在switch语句中创建新的局部变量时遇到问题.我认为它是我的类标题中的东西,但是甚至在尝试分配新的NSObject时遇到错误.这是我的语法:

-(NSArray *)charactersFromChapter:(NSInteger)number {
    NSObject *noError = [[NSObject alloc] init];
    //line above does not cause error
    NSArray *characters;
    switch (number) {
        case 1:
            NSObject *obj = [[NSObject alloc] init];
            //error happens in line above (Expected expression)
            characters = [NSArray arrayWithObject:obj];
            break;
        case 2:

            break;
        case 3:

            break;
    }
    return characters;
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*III 32

在switch语句中,如果不首先设置作用域,则无法初始化变量,因此要修复它,请执行以下操作:

switch (some_expression) {
   case case_1:
   { // notice the brackets
       id some_obj = [MyObj new];
       break;
   }
   default:
       break; 
} 
Run Code Online (Sandbox Code Playgroud)


icc*_*cir 5

您需要在switch语句之外声明"obj",或者使用大括号,如下所示:

switch (number) {
    case 1: {
        NSObject *obj = [[NSObject alloc] init];
        //error happens in line above (Expected expression)
        characters = [NSArray arrayWithObject:obj];
        break;
    }
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见此处: 为什么不能在switch语句中声明变量?