objective c要求参数为常量

时间:2013-06-05 17:08:21

标签: objective-c

所以我是目标C的新手,一般都是打字语言,虽然我很享受他们的冗长。

我正在定义一堆这样的常量:

NSString const *MAP_TILES_TYPE_IDX = @"idx";
NSString const *MAP_TILES_TYPE_MLS = @"mls";
NSString const *MAP_TILES_TYPE_PROPERTY = @"mu";
NSString const *MAP_TILES_TYPE_SERVICES = @"sr";

我有一个只接受其中一个字符串的方法:

-(void) addTileLayer:(NSString *)type {
...
}

有人可以给我一个建议,以便更好地执行我希望参数type成为我定义的常量之一的事实吗?

我愿意接受任何建议。

2 个答案:

答案 0 :(得分:4)

您应该将NSString替换为enum,如下所示:

typedef enum {
    MAP_TILES_TYPE_IDX,
    MAP_TILES_TYPE_MLS,
    MAP_TILES_TYPE_PROPERTY,
    MAP_TILES_TYPE_SERVICES
} MapTilesType;
...
-(void) addTileLayer:(MapTilesType)type {
    ...
}

如果这些常量需要NSString,请定义NSArrayenum值映射到字符串,如下所示:

NSArray *tileTypeToTypeName = @[@"idx", @"mls", @"mu", @"sr"];

答案 1 :(得分:2)

如果你需要一个方法只接受某些字符串,为什么不把它作为一个参数而不是NSString,并在内部将枚举转换为你需要的字符串?

这样,该方法的用户将仅限于枚举值。另外,你可以隐藏它们的实际字符串(并不总是需要,但看起来更干净)。