在Swift中访问#define常量数组

时间:2016-11-30 14:03:33

标签: objective-c swift

我按照建议here将常量存储在objective-c头文件中。我定义了一个NS_ENUM以及一个在objective-c中很好地工作的常量数组,例如: SDModeString(kSDOne)。但是,我无法通过Swift调用此工作。我确信我在这里做了一些非常愚蠢的事情,但是对如何从Swift调用SDModeString的建议将不胜感激。我可以访问SDMode但不能访问SDModeString。谢谢。

typedef NS_ENUM(NSInteger, SDMode) {
    kSDOne, kSDTwo, kSDThree
};
#define SDModeString(SDMode) [@[@"kSDOne",@"kSDTwo",@"kSDThree"]     objectAtIndex:SDMode]

1 个答案:

答案 0 :(得分:4)

您需要将SDModeString转换为正确的功能,如下所示:

inline NSString *SDModeString(enum SDMode mode) {
  return [@[ @"kSDOne", @"kSDTwo", @"kSDThree" ] objectAtIndex:mode];
}

虽然我可能只是使用开关,更快,更安全等等:

inline NSString *SDModeString(enum SDMode mode) {
  switch (mode) {
    case kSDOne:   return @"kSDOne";
    case kSDTwo:   return @"kSDTwo";
    case kSDThree: return @"kSDThree";
    default: assert(false);
  }
}