2015-07-01 39 views
0

我已经宣布了几个字符串在.h文件中恒:如何强制一个参数成为一个常量?

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

而在.m文件赋值给他们:

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

我现在有一个方法声明这需要一个这些服务名称常量作为参数,我想强制它总是采取一个常量。喜欢的东西:

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

然而,即使我设法执行它是一个常量,它并不能阻止我传递不在服务名称的常量。我真正追求的是一种带字符串的枚举,或者一种定义一些类型的方法,它有几个可以被称为常量的字符串值。

我以一个普通的枚举开始,但最后我需要服务名称为正确的字符串,因为这是数据库中所需的表示形式,并且如果有一个简单的解决方案,将删除大量的序列化的复杂性。

回答

1

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

typedef enum { 
    Service1, 
    Service2 
} Service; 

- (BOOL)serviceHasProfileUrl:(Service)service; 

编辑(后问题编辑):

没有理由使用字符串只是因为这是服务如何在一些外部系统表示。

而是提供映射等。无论是要求对外表示:

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

NSString *databaseMapping = serviceDatabaseMapping[service]; 
+0

谢谢你 - 请编辑到原来的问题。 – Elise

+0

@Elise确定,已更新。实际上,您可能需要调整该字典,因为目前还不清楚“@(枚举)”在没有编译器呻吟的情况下会起作用。 – Droppy

相关问题