【问题标题】:Expression is not an integer constant expression in iOS objective c表达式不是iOS目标c中的整数常量表达式
【发布时间】:2015-09-16 03:33:18
【问题描述】:

我想用下面的表达式

-(void)SwitchCondn{
    int expression;
    int match1=0;
    int match2=1;

    switch (expression)

    {
        case match1:

            //statements

            break;

        case match2:

            //statements

            break;

        default:

           // statements

            break;

    }

但我得到了

我在研究时发现

In order to work in Objective-C, you should define your constant either like this:
#define TXT_NAME 1
Or even better, like this:
enum {TXT_NAME = 1};

我很长时间以来一直在使用这种方法。现在我的变量值会在运行时发生变化,所以我需要以其他方式定义,我不想使用 if else 所以有没有其他方式声明变量的方式

我有研究过

Why can I not use my constant in the switch - case statement in Objective-C ? [error = Expression is not an integer constant expression]

Objective C switch statements and named integer constants

Objective C global constants with case/switch

integer constant does 'not reduce to an integer'

【问题讨论】:

标签: ios objective-c switch-statement


【解决方案1】:

错误expression is not an integer constant expression 的意思就是它所说的:在case 中,值必须是常量,如in,而不是变量。

您可以将switch 上方的声明更改为常量:

const int match1=0;
const int match2=1;

或者您可以使用枚举。或#define。但是你不能在那里使用非常量变量。

【讨论】:

  • 我能在任何我想要的地方更改 match1 的值吗
  • 如果您想在case 中使用它,则不要。
  • 我有条件需要声明 const int match1 为通用的,并且我需要在从服务器获取数据后设置 const int match1 的值
  • 不,正如错误消息指出的那样,它必须是一个常量
  • int 之前使用const 不会 使此警告消失。至少不会在带有GCC_WARN_PEDANTIC = YES 的 Xcode 7.3.1 上。让它消失的唯一方法是使用定义宏或枚举。
【解决方案2】:

如果你想要有标签的案例,你需要一个 ENUM 类型

typedef NS_ENUM(int, MyEnum) {
  match1 = 0,
  match2 = 1
};

- (void)switchCondn:(MyEnum)expression {

  switch (expression)
  {
    case match1:
      //statements
      break;

    case match2:
      //statements
      break;

    default:
      // statements
      break;
  }
}

【讨论】:

  • 我能在任何我想要的地方更改 match1 的值吗
  • 我的条件是我需要将 const int match1 声明为通用的,并且我需要在从服务器获取数据后设置 const int match1 的值。能实现吗
  • 不,不在 switch 表达式中。你必须使用 if - else 或类似的东西
  • 感谢您的努力。我赞成你的努力,希望也能解决这个问题
  • 这是否意味着使用 if/else 是唯一的选择
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多