如何声明常量

问题描述 投票:0回答:4

在一个简单的项目中,我想设置一个将在整个项目中使用的常量。

例如,

NSDictionary
,键是月份名称,值是该月的天数。

如何做到这一点? (即语法是什么以及将其放在哪里?)如果使用内置函数已经可以使用此示例,则假装它不适合此问题的目的。

objective-c constants
4个回答
19
投票

答案取决于常量的类型。如果您需要的只是

int
double
,您可以使用预处理器和
#define CONST 123
语法。然而,对于 Objective C 类,您需要做更多的工作。

具体来说,您需要将常量隐藏在类方法或独立函数后面。您还需要在头文件中添加该方法或函数的原型,提供函数范围的静态变量来存储常量,并添加代码来初始化它。

这是一个使用简单

NSDictionary
的示例:

标头:MyConstants.h

@interface MyConstants
+(NSDictionary*)getConstDictionary;
@end

实现:MyConstants.m

+(NSDictionary*)getConstDictionary {
    static NSDictionary *inst = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        inst = @{
            @"key1": @"value1",
            @"key2": @"value2",
            @"key3": @"value3"
        };
    });
    return inst;
}

用途:

NSString *val = [[MyConstants getConstDictionary] objectForKey:@"key2"];

3
投票

接受的答案是正确的,但是如果您更喜欢使用变量(而不是槽方法)进行操作。我可以建议这种模式:

@implementation MyClass
 
static NSSet *mySetOfObjects;
 
+ (void)initialize {
    mySetOfObjects = [[NSSet alloc] initWithObjects:@"one", @"two", @"three", nil];
}

// Example usage:  
+ (BOOL)isRecognizedString:(NSString *)searchItem {
    return [mySetOfObjects containsObject:searchItem];
}
 
@end

对于我来说 - 看起来更好。


有关更多详细信息,来源在这里


2
投票

假设您想在类中声明一个包含 url 的 NSString 常量。在您的头 .h 文件中,您将需要以下内容:

#import 

extern NSString * const BaseURL;

@interface ClassName : NSObject {

然后,您需要在主 .m 文件中设置它的值,如下所示:

#import "ClassName.h"

NSString * const BaseURL = @"http://some.url.com/path/";

@implementation ClassName

您现在可以在整个类或子类中访问此常量。这是一个使用示例:

NSString *urlString = [NSString stringWithFormat:@"%@%@", BaseURL, @"filename.html"];

0
投票

如果你的常量是字符串,那么你可以使用这种形式:

MyObject.h:

extern NSString *const kJanuary;
....
extern NSString *const kDecember;

@interface MyObject : NSObject
{
    ...
}

@end

我的对象.m:

NSString *const kJanuary = @"January";
....
NSString *const kDecember = @"December";

@implementation MyObject

....

@end

然后,您可以在使用类时从任何地方使用常量

kJanuary

© www.soinside.com 2019 - 2024. All rights reserved.