1

因此,尽管我很喜欢它们的冗长,但我对 Objective 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成为我定义的常量之一的事实?

我愿意接受任何建议。

4

2 回答 2

4

您应该替换NSStringenum,如下所示:

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

如果您需要NSString这些常量的 an,请定义将值NSArray映射enum到字符串的 an,如下所示:

NSArray *tileTypeToTypeName = @[@"idx", @"mls", @"mu", @"sr"];
于 2013-06-05T17:12:05.790 回答
2

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

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

于 2013-06-05T17:11:51.717 回答