Jul*_*les 14 tags constants case objective-c switch-statement
所以我在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,所以我没有看到问题......
谢谢你的帮助!
Tho*_*mas 20
快速解决方案,你应该放在NSInteger const TXT_NAME = 1;
Constants.h中,并且在Constants.m中不需要任何东西.
原因:如果在.m中设置常量的值,则仅包含.h文件的其他翻译单元不会显示该值.必须在编译时知道常量的值才能在a case
中使用switch
.
更新:
在Objective-C++中编译时,上述工作.您需要将文件结束,.mm
而不是.m
使用Objective-C++而不是Objective-C编译它们.
为了在Objective-C中工作,你应该像这样定义你的常量:
#define TXT_NAME 1
甚至更好,像这样:
enum {TXT_NAME = 1};
Pau*_*l.s 10
我通常会遵循Apple的样子,并在.h文件中定义一个typedef枚举.
typedef NS_ENUM(NSInteger, PSOption) {
PSOption1,
PSOption2,
PSOption3,
PSOption4,
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以在case语句中使用它,甚至将它传递给函数以及类型,例如
- (void)myMethod:(PSOption)option;
Run Code Online (Sandbox Code Playgroud)
在a上执行此操作的另一个优点#define
是代码完成和编译器检查
归档时间: |
|
查看次数: |
11486 次 |
最近记录: |