gpt4 book ai didi

objective-c - Obj-C/Swift 混合中的枚举和数组访问

转载 作者:行者123 更新时间:2023-11-30 13:19:11 24 4
gpt4 key购买 nike

我继承了一个项目,该项目正在根据要求成为 Swift/Obj-C 混合体。大多数 Obj-C 代码都是模块化的,除了一个异常(exception)之外,它工作得很好。头文件中有数百行定义,如下所示:

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 文件,并将字符串格式化回最初的整数数组。但是 - 这种方法看起来非常复杂,并且会导致代码重复。如果有任何提示或提示,我会非常高兴。

最佳答案

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

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

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

关于objective-c - Obj-C/Swift 混合中的枚举和数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37931102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com