如何将参数强制为const?

时间:2015-07-01 10:49:42

标签: objective-c

我在.h文件中声明了一些字符串常量:

extern NSString *const kServiceName1;
extern NSString *const kServiceName2;

并在.m文件中为它们分配值:

NSString *const kServiceName1 = @"service1";
NSString *const kServiceName2 = @"service2";

我现在有一个方法声明,它将这些服务名称常量之一作为参数,我想强制它始终采用const。类似的东西:

- (BOOL)serviceHasProfileUrl:(NSString const*)serviceName;

但是,即使我设法将其强制为const,也不会阻止我传入非服务名称的常量。我真正想要的是一种带字符串的枚举,或者一种定义某种ServiceName类型的方法,它有几个字符串值,可以称为常量。

我从正常的枚举开始,但最后我需要服务名称是正确的字符串,因为这是数据库中所需的表示,如果有一个简单的解决方案,将消除很多复杂性序列化。

1 个答案:

答案 0 :(得分:1)

由于无法创建enum字符串,为什么不使用普通enum?无论如何,将服务表示为字符串似乎没有任何优势。

typedef enum {
    Service1,
    Service2
} Service;

- (BOOL)serviceHasProfileUrl:(Service)service;

编辑(问题编辑后):

没有理由使用字符串,因为这是在某些外部系统中表示服务的方式。

而是提供需要外部表示的映射:

NSDictionary *serviceDatabaseMapping = @{
   @(Service1): @"service1database",
   @(Service2): @"service2database"
};

NSString *databaseMapping = serviceDatabaseMapping[service];