表达式不是iOS目标c中的整数常量表达式

Nis*_*ada 4 objective-c switch-statement ios

我想使用以下表达式

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

    switch (expression)

    {
        case match1:

            //statements

            break;

        case match2:

            //statements

            break;

        default:

           // statements

            break;

    }
Run Code Online (Sandbox Code Playgroud)

但是我得到了

在此输入图像描述

当我研究我发现

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};
Run Code Online (Sandbox Code Playgroud)

我很久以来一直在使用这种方法.现在我的变量值将在运行时改变,所以我需要以其他方式定义,我不想使用if else所以有任何方式的声明变量其他方式

我接受了以下研究

为什么我不能在Objective-C中的switch-case语句中使用我的常量?[error = Expression不是整数常量表达式]

Objective C switch语句和命名整数常量

Objective C具有case/switch的全局常量

整数常量'不会减少为整数'

Tom*_*ton 11

错误expression is not an integer constant expression意味着它所说的:在a中case,值必须是常量,而不是变量.

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

const int match1=0;
const int match2=1;
Run Code Online (Sandbox Code Playgroud)

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

  • 在 `int` 之前使用 `const` 不会让这个警告消失。至少在 Xcode 7.3.1 上没有“GCC_WARN_PEDATIC = YES”。让它消失的唯一方法是使用宏定义或枚举。 (3认同)

vad*_*ian 6

如果您想要标记的案例,则需要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;
  }
}
Run Code Online (Sandbox Code Playgroud)