我正在开发一个Cocoa应用程序,并且我使用常量NSStrings作为存储我的首选项的键名的方法.
我知道这是一个好主意,因为它可以在必要时轻松更改密钥.此外,它是整个'将您的数据与逻辑分离'的概念.
无论如何,是否有一种很好的方法可以为整个应用程序定义一次这些常量?我确信这是一种简单而聪明的方式,但是现在我的课程只是重新定义了他们使用的课程.
我用这段代码设置我的常量
// 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标签不会减少为整数常量"
什么想法可能搞砸了?
所以我在Objective-C的以下switch语句中使用常量变量时遇到问题.
我有以下Constants.h:
// Constants.h
extern NSInteger const TXT_NAME;
Run Code Online (Sandbox Code Playgroud)
和Constants.m为:
// Constants.m
#import "Constants.h"
NSInteger const TXT_NAME = 1;
Run Code Online (Sandbox Code Playgroud)
然后在TabBasic.m中我试图在switch-case语句中使用这个常量:
// TabBasic.m
#import "TabBasic.h"
#import "Constants.h"
... code ...
- (IBAction)saveValue:(id)sender {
if ([sender isKindOfClass: [UITextField class]]) {
UITextField *txtField = (UITextField *) sender;
switch (txtField.tag) {
case TXT_NAME:
NSLog(@"Set property name to: %@", txtField.text);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,它在"案例TXT_NAME:"行中给了我以下两个错误:
有谁知道我做错了什么?UITextField的"tag"变量返回一个NSInteger,所以我没有看到问题......
谢谢你的帮助!
我想使用以下表达式
-(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不是整数常量表达式]