Objective-C 中的 Switch 语句和实例变量分配

发布于 2024-12-28 20:50:51 字数 611 浏览 2 评论 0原文

我似乎在 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;
}

I seem to be having a problem creating new local variables inside a switch statement. I thought it was something in my class headers, but was even getting errors trying to allocate a new NSObject. Here's my syntax:

-(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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

十年不长 2025-01-04 20:50:51

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

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

In a switch statement, you cannot initialize variables without setting a scope first, so to fix it, do something like this:

switch (some_expression) {
   case case_1:
   { // notice the brackets
       id some_obj = [MyObj new];
       break;
   }
   default:
       break; 
} 
云淡风轻 2025-01-04 20:50:51

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

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

请参阅此处了解更多信息:
为什么不能在 switch 语句中声明变量?

You need to either declare "obj" outside of the switch statement, or use braces as follows:

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

See here for more information:
Why can't variables be declared in a switch statement?

喜爱皱眉﹌ 2025-01-04 20:50:51

在 switch-case 中只能使用表达式。

您可以使用如下方法修复此问题:

case 1:
{
       NSObject *obj = [[NSObject alloc] init];
       characters = [NSArray arrayWithObject:obj];
       break;
}

In switch-case you can only use expressions.

You can fix this by using something like this:

case 1:
{
       NSObject *obj = [[NSObject alloc] init];
       characters = [NSArray arrayWithObject:obj];
       break;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文