首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

这个错误通常是因为在Objective-C的switch-case语句中使用了非整型常量表达式,而switch-case语句只支持整型常量表达式。要解决这个问题,你可以将常量表达式转换为整型,或者在switch-case语句中使用if-else语句。

例如,如果你有一个常量表达式25,你可以将其转换为整型,如下所示:

代码语言:txt
复制
int num = 25;
switch (num) {
    case 25:
        // do something
        break;
    default:
        // do something
        break;
}

如果你必须在switch-case语句中使用常量表达式,你可以使用if-else语句,如下所示:

代码语言:txt
复制
if (condition) {
    // do something
} else {
    // do something
}

在Objective-C的switch-case语句中,不推荐使用常量表达式,而应该使用整型常量表达式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

常量表达式是什么_const常量

大家好,又见面了,是你们朋友全栈君。 常量表达式值(constant-expression value)。...不过编译后我们发现,无论将GetConst结果用于需要初始化数组Arr声明,还是用于匿名枚举,或用于switch-casecase表达式,编译器都会报告错误。...·在使用前必须已有定义。 ·return返回语句表达式不能使用常量表达式函数、全局数据,且必须是一个常量表达式。...首先是常量表达式函数中最为明显限制,就是要求函数体只有一条语句,且该条语句必须是return语句。...而对于j,如果不是有代码显式地使用了它地址,编译器可以选择不为它生成数据,而仅将其当做编译时期值(是不是想起了光有名字没有产生数据枚举值,以及不会产生数据右值字面常量

76010

android library 使用switch 问题

当我们在Android依赖库中使用switch-case语句访问资源ID时会报错,报错误是case分支后面跟参数必须是常数,换句话说出现这个问题原因是Android library中生成R.java...资源ID不是常数.    ...当我们把一个android项目配置为library时,我们就不能在 这个项目中使用switch case,原因就是 library库 生成R.java资源ID不是常数,所以需要我们换一种写法...但是当你打开你主工程,在onClick、onItemClick等各种回调方法是可以通过switch-case语句来访问资源ID,因为在主工程R.java中资源ID都被声明为了final常量。  ...既然是由于libraryR.java资源ID不是常量引起,我们可以在library通过if-else-if条件语句来引用资源ID,这样就避免了这个错误。

65520
  • 第三章 流程控制语句

    如果表达式值等于某个 case 常量值,则执行对应 case 执行语句。...**直到遇到break关键字或执行完所有的case及default执行语句,跳出当前switch-case结构** ‍ 使用注意点: switch(表达式)中表达式值必须是下述几种类型之一:byte...switch 语句条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式结果是否等于某个常量值,​使用场景较狭窄​。...switch 语句优势 当条件是判断某个变量或表达式是否等于某个固定常量值时,使用 if 和 switch 都可以,习惯上使用 switch 更多。因为​效率稍高​。...如果输入数据类型与要求类型匹配时,会报异常 导致程序终止。 6. 如何获取一个随机数 ‍ 如何产生一个指定范围随机整数

    15110

    Swift基础 基础知识

    Objective-C,’ nil ‘是一个指向不存在对象指针。在Swift,’ nil ‘不是一个指针——它是一个特定类型缺失。...可选绑定可以与’ if ‘和’ while ‘语句一起使用,以检查可选绑定值,并将该值提取到一个常量或变量,作为单个操作一部分。...如果转换成功,actualNumber常量可以在if语句第一个分支中使用。它已经用可选中包含值初始化,因此您不使用!后缀以访问其值。在本例,actualNumber仅用于打印转换结果。...如果你想在’ If ‘语句第一个分支操作’ actualNumber ‘值,你可以写’ If var actualNumber ‘代替,而包含在可选值将作为一个变量而不是一个常量可用。...由于makeASandwich()可以抛出错误,函数调用被包装在try表达式。通过将函数调用包装在do语句中,抛出任何错误都将传播到提供catch子句。

    14800

    expr_const在函数前与函数后区别

    大家好,又见面了,是你们朋友全栈君。 const修饰常量,但是const并未区分编译时常量和运行时常量,而constexpr则只能是编译时常量,在C++11提出。...目录 一、常量表达式 二、constexpr变量 三、constexpr函数 四、字面值类型 五、指针和constexpr 六、字面值常量类 参考 一、常量表达式 常量表达式(const expression...sz本身是一个常量,但它具体值直到运行时才能获取到,所以也不是常量表达式。 二、constexpr变量 在一个复杂系统,很难分辨一个初始值到底是不是常量表达式。...(2)constexpr函数体内也可以包含其他语句,只要这些语句在运行时执行任何操作就行。例如,constexpr函数可以有空语句、类型别名、using声明。...当把scale函数用在需要常量表达式上下文中时,编译器发现不是常量表达式,发出错误信息。 (4)constexpr函数通常定义在头文件

    75630

    Kotlin学习笔记(二)-程序结构(上 )

    使用 Lambda 表达式可以使代码变更加简洁紧凑。...可选参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选大括号:如果主体包含了一个语句,就不需要使用大括号。...接受一个 string 对象,并在控制台打印,返回任何值(看起来像是返回void在Kotlin时Unit) (String s) -> System.out.print(s) Lambda表达式要是细说的话可能一篇文章也不够...,觉得刚开始看虽然代码变更简洁,但是对这种只会Java一种语言来说一下子转变有时候还是挺别扭,感觉这个就得多写多看慢慢适应。...因为 {}内容是表达式不是函数,所以return是main这个函数,可以改成如下: run Break@/*外部标识*/{ args.forEach Continue@/

    61920

    Swift基础语法(常量变量、数据类型、元组、可选、断言)

    = 1_000_000.000_000_1 数值型类型转换 通常来讲,即使代码整数常量和变量已知非负,也请使用Int类型。...可选 使用可选(optionals)来处理值可能缺失情况。可选表示: 有值,等于 x 或者 没有值 注意:C 和 Objective-C 并没有可选这个概念。...这个惊叹号表示“知道这个可选有值,请使用它。”...如果转换成功,actualNumber常量可以在if语句第一个分支中使用。它已经被可选包含值初始化过,所以不需要再使用!后缀来获取它值。...// surveyAnswer 被自动设置为 nil 注意:Swift nil和 Objective-C nil并不一样。在 Objective-C ,nil是一个指向不存在对象指针。

    2K90

    窥探Swift编程之错误处理与异常抛出

    Assertions(断言) 在单元测试是少不了断言,Swift断言和Objective-C区别不是太大,使用方法也是大同小异。...使用try对错误进行捕捉,使用do-catch对错误进行处理。具体处理方式如下所示。在下方错误处理类似于switch-case语句,catch后边可以枚举匹配错误类型,具体如下所示:     ?...该功能在开发是非常常用,而且用起来也是非常爽。接下来就看一下如何为我们错误类型添加错误原因。...= nil else { 6 throw MyErrorType(reason: "是详细错误原因,存储在error") 7 } 8 } (3)最后要对抛出错误进行do-catch...由上面的输出结果可知,error是我们自定义MyErrorType类型,我们可以使用下面的代码来代替catchprint语句,如下所示:     ?

    2.2K50

    ——谈谈开发语言与程序员职业发展

    在声明时可以指定常量和变量类型,也可以指定类型,而是直接赋值。Swift会通过所赋值类型自动将定义变量类型。 如果声明时不进行赋值,那么每个类型变量都有自己默认值。...另一个强大功能是For-in语句增强。 比如在For-in语句使用0…4表示循环时取[0,4]闭区间内整数值。 还可以在For-in中使用“元组”遍历Dictionary。...另外用“n…m”形式表示[n,m]闭区间语法也可以应用在switch-case语句中: 以上就是苹果WWDC2014对Swift功能强大方面的一些介绍。...在Swift中使用泛型很方便,语法和Java、C#、C++也很类似。 不过使用Objective-C朋友也有福了,在即将发布XCode7Objective-C也支持泛型了。...通过示例代码可以看出,Swift支持使用多个catch语句捕获不同类型Error,而且也支持使用finally语句

    1.5K30

    c语言 switch错误用法,C语言switch语句详细用法

    将其与后续常量表达式值一一比较. 当表达式值等于常量表达式值时,将执行后续语句,然后不进行判断,并且在个案之后所有后续语句将继续....如果在所有情况下表达式值都与常量表达式不同,则执行default之后语句....但是在输入3之后,将执行情况3及以后所有句子c语言 switch语句,并输出星期三及以后所有单词. 这当然是希望. 为什么会这样?这仅反映了switch语句功能....\n”); } return 0; } 使用switch语句时,还应注意以下几点: 大小写之后每个常量表达式值不能相同,否则会发生错误....在这种情况下,允许使用多个语句,可以将其括在{}. 可以更改case和default子句顺序,而不会影响程序执行结果. 默认子句可以省略.

    1.5K20

    流程控制语句

    switch-case选择结构 语法格式: switch(表达式){ case 常量值1: 语句块1; //break; case 常量值2:...如果表达式值等于某个case常量值,则执行对应case执行语句。...第2步:执行完此case执行语句以后 情况1:如果遇到break,则执行break并跳出当前switch-case结构 情况2:如果没有遇到break,则会继续执行当前case之后其它case执行语句...直到遇到break关键字或执行完所有的case及default执行语句,跳出当前switch-case结构 使用注意点: switch(表达式)中表达式值必须是这几种类型 : byte , short...关键字break 和 continue使用 适用范围 在循环结构中使用作用 相同点 break switch-case 循环结构 一旦执行,就结束(或跳出)当前循环结构

    12510

    Swift基础语法

    如果表达式同时出现了整数和浮点数,会被推测为Double类型: [objc] view plain copy print?...1_000_000.000_000_1 数值型类型转换 通常来讲,即使代码整数常量和变量已知非负,也请使用Int类型。...可选 使用可选(optionals)来处理值可能缺失情况。可选表示: 有值,等于 x 或者 没有值 注意:C 和 Objective-C 并没有可选这个概念。...如果转换成功,actualNumber常量可以在if语句第一个分支中使用。它已经被可选包含值初始化过,所以不需要再使用!后缀来获取它值。...// surveyAnswer 被自动设置为 nil 注意:Swift nil和 Objective-C nil并不一样。在 Objective-C ,nil是一个指向不存在对象指针。

    1.5K60

    知识扩展--if...else...与switch...case...执行原理if和switch原理

    switch ( 常量表达式 ){ case 常量1 :语句; case 常量2 :语句; case 常量3 :语句; ......case 常量n:语句; default :语句; } switch后面小括号中常量表达式值必须是整型或字符型(不同编程语言规定不一样,Java除了整数之外还可以是枚举和字符串,PHP还可以是浮点数...) case后面的值可以是常量数值,如1、2;也可以是一个常量表达式,如2+2;但不能是变量或带有变量表达式,如a*2。...,对于if...else..语句,首先进行条件判断,if表达式为真,则继续执行if快语句,然后利用jmp跳转到else语句块外,否则会利用jmp跳转到else语句,然后依次执行其后每一句代码。...但是switch-case缺点是只能处理常量匹配,在仅有常量选择分支时候,可以选用switch-case结构,而此时通过遍历数组比较更是不可取一种方式,但是if-elseif可以应用于更多场合

    1.5K30

    C语言中分支与循环

    1.if 结构:if(表达式) 语句 含义:表达式成立(为真),则语句执行,表达式不成立(为假),则语句执行。...必须是整型表达式,case后面的值,必须是整型常量表达式 和if语句对比:例子:输入一个数,计算除3过后余数 如果用if语句写的话,如下: 如果用switch-case语句写的话,如下: 在上述代码...所以,switch语句中break语句是非常重要,能实现真正分支效果。 当然,break语句不是每个switch语句中是必须要有的,这就要根据实际情况考虑了。...switch语句default: 在使用switch语句中也会遇到一种情况,switch后表达式值无法匹配代码case语句,这时要不不做处理,要不就在switch语句中加入default语句...expression结果不是value1,也不是value2时候,就会执行default语句

    8410

    Swift基础 错误处理

    区分这些不同情况允许程序解决一些错误,并向用户传达任何无法解决错误。 注意 Swift错误处理与Cocoa和Objective-C使用NSError类错误处理模式互操作。...与包括Objective-C在内许多语言中异常处理不同,Swift错误处理涉及解开调用堆栈,这个过程在计算上可能很昂贵。因此,throw语句性能特征与return语句性能特征相当。...如果没有匹配模式,错误将被最终catch子句捕获,并绑定到局部error常量。如果没有抛出错误,则执行do语句其余语句。 catch子句不必处理do子句中代码可以抛出所有可能错误。...否则,x和y值是函数返回值。请注意,x和y是someThrowingFunction()返回任何类型可选。在这里,函数返回一个整数,因此x和y是可选整数使用try?...defer语句来确保open(_:)函数具有相应调用 close(_:) 注意 即使涉及错误处理代码,您也可以使用defer语句

    13800

    前端基础-JavaScript流程控制

    { // 最后默认执行语句 } 案例 //获取两个数字最大值 var num1=100; var num2=20; if(num1>num2){ console.log(num1);...a1:a2; console.log(s); switch语句 语法格式: switch (expression) { case 常量1: 语句; break; case 常量2...获取表达式值,和值1比较,相同则执行代码1,遇到break跳出整个语句,结束 * 如果和值1匹配,则和值2比较,相同则执行代码2,遇到break跳出整个语句,结束 * 如果和值2匹配,则和值3比较...,相同则执行代码3,遇到break跳出整个语句,结束 * 如果和值3匹配,则和值4比较,相同则执行代码4,遇到break跳出整个语句,结束 * 如果和之前所有的值都不一样,则直接执行代码5,结束 *.../ break可以省略,如果省略,代码会继续执行下一个case switch 语句在比较值时使用是全等操作符, 因此不会发生类型转换(例如,字符串'10' 不等于数值 10) /* * * 判断这个人成绩级别

    79310

    Swift进阶四——流程控制

    使用switch-case来匹配元组 你可以使用元组来在一个switch语句中测试多个值;使用下划线(_)来表明匹配所有可能值。...也就是说,它是停止当前遍历,而不是结束整个循环。 break break语句会立即结束整个控制流语句。当你想要提前结束switch或者循环语句时候,就可以使用break语句。...} } 表达式模式(Expression Pattern) 表达式模式代表表达式值。表达式模式只出现在switch语句case标签。...表达式模式代表表达式使用Swift标准库 ~= 运算符与输入表达式值进行比较。如果 ~= 运算符返回true,则匹配成功。默认情况下, ~=运算符使用==运算符来比较两个相同类型值。...他也可以将一个整型数值与一个Range实例一段整数区间做匹配。

    83710

    【JavaSE学习】Day2 JavaSE基础语法

    否则,范围小就没机会执行了。 3. if-else结构是可以相互嵌套。 4. 如果if-else结构执行语句只有一行时,对应一对{}可以省略。但是,建议大家省略。...switch-case选择结构 switch(表达式){ case 常量1:     执行语句1;     //break; case 常量2:     执行语句2;     //break; ......default:     执行语句n;     //break; } 说明: ① 根据switch表达式值,依次匹配各个case常量。...当调用完执行语句以后,则仍然继续向下执行其他case结构执行语句,直到遇到break关键字或此switch-case结构   末尾结束为止。...② break,可以使用switch-case结构,表示一旦执行到此关键字,就跳出switch-case结构 ③ switch结构表达式,只能是如下6种数据类型之一:    byte 、short

    42220

    C#3.0新增功能10 表达式树 05 解释表达式

    为了运行此示例并查看完整表达式树,不得不对源表达式树进行一次更改。 当表达式树包含所有常量时,所得到树仅包含 10 常量值。 编译器执行所有加法运算,并将表达式缩减为其最简单形式。...表达式不存在表示输入表达式括号节点。 表达式结构包含传达优先级所需所有信息。 从此示例扩展 此示例仅处理最基本表达式树。 在本部分中看到代码仅处理常量整数和二进制 + 运算符。...这意味着无法使用循环、块、if / else 语句和 C# 中常用其他控件结构。 只能使用表达式。 其次,不能以递归方式调用同一表达式。...如果该表达式已是一个委托,则可以通过递归方式进行调用,但不能在表达式形式调用它。 在有关生成表达式部分中将介绍克服这些限制技巧。...略过了很多可能需要操作,以便专注于访问表达式节点这一核心任务。 首先,访问者只处理整数常量常量值可以是任何其他数值类型,且 C# 语言支持这些类型之间转换和提升。

    58230
    领券