我按照建议将常量存储在objective-c头文件中here。我定义了一个ns_枚举和一个常量数组,它在objective-c中工作得很好,例如sdmoderstring(ksdone)。但是,我不能让斯威夫特给我打电话。我确信我在这里做了一些非常愚蠢的事情,但如果能从斯威夫特那里得到一个如何称呼SDM的建议,我将不胜感激。我可以进入SDMode但不能进入SDModestring。谢谢。

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

最佳答案

你需要把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);
  }
}

10-05 21:50