【问题标题】:Enum and Array Access in Obj-C/Swift HybridObj-C/Swift 混合中的枚举和数组访问
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多