我想在iOS应用中的Constants Singleton类中设置我的全局常量值,以便导入常量的任何类都可以使用这些值。
然而,在用这个想法玩了几个小时之后,我仍然无法让它发挥作用。
在我的Constants.m文件中
@interface Constants()
{
@private
int _NumBackgroundNetworkTasks;
NSDateFormatter *_formatter;
}
@end
@implementation Constants
static Constants *constantSingleton = nil;
//Categories of entries
typedef enum
{
mapViewAccessoryButton = 999
} UIBUTTON_TAG;
+(id)getSingleton
{
.....
}
我有另一个类MapViewController,其中我引用了Constants单例,我试图访问这样的枚举
myDetailButton.tag = self.constSingleton.UIBUTTON_TAG.mapViewAccessoryButton;
但是,这不起作用。我无法访问mapviewcontroller中的UIBUTTON_TAG
有人有什么建议吗?
由于
答案 0 :(得分:3)
如果您想在整个应用程序中使用枚举,请将枚举定义放在.h文件中,而不是.m文件中。
<强>更新强>:
Objective-C不支持名称空间,它不支持类级别常量或枚举。
该行:
myDetailButton.tag = self.constSingleton.UIBUTTON_TAG.mapViewAccessoryButton;
应该是:
myDetailButton.tag = mapViewAccessoryButton;
假设您在某个.h文件中定义UIBUTTON_TAG
枚举。
编译Objective-C应用程序时,所有枚举的所有值都必须具有唯一的名称。这是Objetive-C基于C的结果。
更新2 :
有一种方法可以获得你想要的东西而不是枚举。这样的事情应该有效:
Constants.h:
@interface UIBUTTON_TAG_ENUM : NSObject
@property (nonatomic, readonly) int mapViewAccessoryButton;
// define any other "enum values" as additional properties
@end
@interface Constants : NSObject
@property (nonatomic, readonly) UIBUTTON_TAG_ENUM *UIBUTTON_TAG;
+ (id)getSingleton;
// anything else you want in Constants
@end
Constants.m
@implementation UIBUTTON_TAG_ENUM
- (int)mapViewAccessoryButton {
return 999;
}
@end
@implementation Constants {
int _NumBackgroundNetworkTasks;
NSDateFormatter *_formatter;
UIBUTTON_TAG_ENUM *_uiButtonTag;
}
@synthesize UIBUTTON_TAG = _uiButtonTag;
- (id)init {
self = [super init];
if (self) {
_uiButtonTag = [[UIBUTTON_TAG_ENUM alloc] init];
}
return self;
}
// all of your other code for Constants
@end
现在你可以做到:
myDetailButton.tag = self.constSingleton.UIBUTTON_TAG.mapViewAccessoryButton;
我不确定这是否有意义。
答案 1 :(得分:1)
如果您不打算更改枚举,只需将其粘贴在预编译的头文件(.pch)中即可。