【发布时间】:2016-06-20 20:16:35
【问题描述】:
我继承了一个项目,该项目正在按要求成为 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 文件并将字符串格式化回它们最初的整数数组。但是 - 这种方法似乎非常复杂,并且会导致代码重复。如果有任何提示或提示,我会非常高兴。
【问题讨论】:
-
这里有 C 数组和枚举。两者都没有直接导入 swift。枚举可以使用 NS_ENUM 宏导入。但是 C-Arrays 被导入为
UnsafePointer。
标签: objective-c arrays json swift enums