我已经继承了一个项目,该项目正在按照要求成为Swift / Obj-C混合体。大多数Obj-C代码都是模块化的,只有一个例外,它可以正常工作。头文件中有数百行定义,如下所示:
enum _decks { kOneDecks = 1, kTwoDecks, kThreeDecks ...
enum _cards { kAce = 0, kKing, kQueen, kJack, ...
static const int _stackA[kFourDecks][kTwoDecks] = {
/*_evalIndex_32*/ {kAce, kAce, kAce, kAce, kKing, kKing, kKing, kKing, -1, -1, -1, -1},
/* _evalIndex_31, 7*/ {kAce, kAce, kAce, kAce, kQueen, kQueen, kQueen, -1, -1, -1, -1, -1},
...
像_stackA这样的数组直接在Obj-C中访问:
NSInteger newCard = _stackA[kQueen][random()];
我也需要在Swift中访问这些枚举和数组,似乎无法找到一种有效的方法。使事情变得困难的是所有常量(即kAce)必须保留在原位以便于编辑,因此将这些数组格式化为plist将不起作用。更糟糕的是 - 几个Obj-C类依赖于这些常量。
我提出的一种方法是将头文件格式化为json,同时用字符串替换所有常量。然后我可以导入并解析json文件并将字符串格式化回最初的整数数组。但是 - 这种方法看起来非常复杂,会导致代码重复。我会对任何提示或提示感到高兴。
答案 0 :(得分:0)
您应该使用NS_ENUM
宏来在Swift中使用ObjC枚举。如下所示:
typedef NS_ENUM(NSUInteger, Decks) {
kOneDecks = 1,
kTwoDecks,
kThreeDecks,
};
你可以像Swift文件中的Decks.OneDecks
一样使用它。