我在.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
类型的方法,它有几个字符串值,可以称为常量。
我从正常的枚举开始,但最后我需要服务名称是正确的字符串,因为这是数据库中所需的表示,如果有一个简单的解决方案,将消除很多复杂性序列化。
答案 0 :(得分:1)
由于无法创建enum
字符串,为什么不使用普通enum
?无论如何,将服务表示为字符串似乎没有任何优势。
typedef enum {
Service1,
Service2
} Service;
- (BOOL)serviceHasProfileUrl:(Service)service;
编辑(问题编辑后):
没有理由使用字符串,因为这是在某些外部系统中表示服务的方式。
而是提供需要外部表示的映射:
NSDictionary *serviceDatabaseMapping = @{
@(Service1): @"service1database",
@(Service2): @"service2database"
};
NSString *databaseMapping = serviceDatabaseMapping[service];