所以我是目标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
成为我定义的常量之一的事实吗?
我愿意接受任何建议。
答案 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
,请定义NSArray
将enum
值映射到字符串,如下所示:
NSArray *tileTypeToTypeName = @[@"idx", @"mls", @"mu", @"sr"];
答案 1 :(得分:2)
如果你需要一个方法只接受某些字符串,为什么不把它作为一个参数而不是NSString,并在内部将枚举转换为你需要的字符串?
这样,该方法的用户将仅限于枚举值。另外,你可以隐藏它们的实际字符串(并不总是需要,但看起来更干净)。