Obj-C / Swift Hybrid中的枚举和数组访问

时间:2016-06-20 20:16:35

标签: objective-c arrays json swift enums

我已经继承了一个项目,该项目正在按照要求成为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文件并将字符串格式化回最初的整数数组。但是 - 这种方法看起来非常复杂,会导致代码重复。我会对任何提示或提示感到高兴。

1 个答案:

答案 0 :(得分:0)

您应该使用NS_ENUM宏来在Swift中使用ObjC枚举。如下所示:

typedef NS_ENUM(NSUInteger, Decks) {
    kOneDecks = 1,
    kTwoDecks,
    kThreeDecks,
};

你可以像Swift文件中的Decks.OneDecks一样使用它。