iOS在switch case中无法分配新的对象。

19 浏览
0 Comments

iOS在switch case中无法分配新的对象。

我有一个类似这样的switch case:

  switch ([weatherCode intValue]) {
       case 1:
           ...
           break;
       case 2:
           ....
           break;
  }

但是我想在这个case中分配一个对象,像这样 NSString *string = @"hello"; 但是它一直给我一个错误 expect expression,我完全不明白发生了什么。请帮忙解决。谢谢。

0
0 Comments

在iOS开发中,有一个问题是在switch case语句中无法分配新对象。解决方法是在每个case语句中加上一对大括号 {},这样问题就可以解决了。以下是一个示例代码:

switch ([weatherCode intValue]) {
   case 1:
   {
      // 在这里可以分配新对象
   }
       break;
   case 2:
   {
      // 在这里可以分配新对象
   }          
   break;
}

这个问题的解决方法非常简单,只需要在每个case语句中添加大括号即可。这样做的原因是因为在switch case语句中,每个case都会创建一个新的作用域。如果不添加大括号,那么在每个case中定义的变量将会在整个switch语句中都可见,从而导致无法分配新对象的问题。

这个问题的解决方法非常简单,只需要在每个case语句中添加大括号即可。这样做的原因是因为在switch case语句中,每个case都会创建一个新的作用域。如果不添加大括号,那么在每个case中定义的变量将会在整个switch语句中都可见,从而导致无法分配新对象的问题。

希望这个解决方法能帮助到你,如果你还有其他问题,请随时向我提问。

0
0 Comments

在Objective-C和Objective-C++中,while、for、switch等语句都包含一个单独的块语句(if...else包含两个)。块内声明的变量的作用域仅限于该块,如果在块内声明同一个变量两次,则会报错。

switch语句的块包含一系列case标签,这些标签并不构成块的边界,它们只是控制流可以跳转到的块内的某个点。这使得C语言中的switch语句与其他一些语言中的switch语句不同,其他语言中的每个分支都是独立的(就像C语言中的if/else中的两个块是独立的一样)。C语言中的switch只是一个“computed goto”跳转到单个块内。这就是为什么有break语句的存在,如果没有它,控制流会从一个“分支”继续到下一个。

这也意味着不同的分支不能声明相同的变量名,不像if/else语句那样。

最后,只有语句而不是声明可以被标记,而case...是标记的一种形式,所以不能在其后立即声明变量,所以不能以声明开始一个“分支”。

如果你希望在一个分支内声明的变量仅在该分支中使用(就像在if/else的两个块中声明的变量一样),那么你可以通过将该分支括在大括号{}中,将其转换为块语句 - 块可以被标记,并且可以包含局部声明。例如:

switch (expr)
{
   case 1:
      {
         NSString *var;
         // 使用var
         break;
      }
   case 2:
      {
         NSNumber *var;
         // 使用var
         break;
      }
   ...
}
// 这里没有var

如果你要给你在switch之后需要使用的变量赋值,则必须在switch之前声明它们,因为switch的主体是一个块,因此是一个局部声明作用域。例如:

NSString *var = nil;
switch (expr)
{
   case 1:
      ...
      var = ...;
      break;
   case 2:
      ...
      var = ...;
      break;
   ...
}
// 在这里使用var

希望对你有所帮助。

0
0 Comments

iOS在switch case语句中无法分配新对象的问题出现的原因是变量的初始化需要使用大括号。下面是解决这个问题的方法:

switch ([weatherCode intValue]) {
       case 1:{
           NSString *string = @"hello";
       }
       break;
       case 2: {
           ....
       }
       break;
  }

通过在case后面添加大括号,可以在每个case中正确地初始化变量。这种方式可以确保在每个case中都有一个独立的作用域,从而避免变量重复定义或引起其他问题。

总结起来,当在iOS中使用switch case语句时,如果需要在每个case中初始化变量,必须使用大括号来确保变量在每个case中都有独立的作用域。这样可以避免iOS无法在switch case中分配新对象的问题。

0