我用这段代码设置我的常量
// Constants.h
extern NSInteger const KNameIndex;
// Constants.m
NSInteger const KNameIndex = 0;
Run Code Online (Sandbox Code Playgroud)
在导入Constant.h文件的文件中的switch语句中,我有:
switch (self.sectionFromParentTable) {
case KNameIndex:
self.types = self.facilityTypes;
break;
...
Run Code Online (Sandbox Code Playgroud)
我在编译时遇到错误:"错误:case标签不会减少为整数常量"
什么想法可能搞砸了?
epa*_*tel 22
对于C/C++和Objective-C,case语句必须具有固定值 - 在编译时"缩减为整数(读取值) "
你的常量不是一个真正的"常量",因为它是一个变量,我想它可以通过指针改变 - 即 &KNameIndex
通常将常量定义为 enum
enum {
KNameIndex = 0,
kAnotherConstant = 42
};
Run Code Online (Sandbox Code Playgroud)
如果您使用C++或Objective-C++(.mm作为文件扩展名),您可以使用const语句作为
const int KNameIndex = 0;
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以使用
#define KNameIndex 0
...
switch (self.sectionFromParentTable) {
case KNameIndex:
self.types = self.facilityTypes;
break;
...
Run Code Online (Sandbox Code Playgroud)
它应该工作.
刚遇到同样的问题,我决定选择#define而不是enum.为我工作™;-)
cra*_*str -1
我认为您坚持使用 aconst int而不是 aconst NSInteger因为开关仅适用于内置整数类型。(不确定你的语法在类型之后翻转了 const )。
看看相关问题:Objective-C switch using object?