寻找一种稳定的方法来存储 XCode 13/Swift 5 中的大静态常量

Looking for a stable way to store a large static constant in XCode 13/Swift 5

情况: 我有一个简单的文字游戏,它使用英语词典(语言词典)提供定义(在词典数据结构中,代码词典) . Apple 的 API 无法满足我的需求,而且我找不到 suitable 第 3 方解决方案。该游戏在缺少单词和定义的临时字典上运行良好。我获取了 Wiktionary 数据库并对其进行了解析,但发现 returns 减少了大约 46MB。该词典是一个简单的文本文件,每行一个词的定义。还有一个单独的单词列表文件,每个文件一个单词。我使用 Python 脚本进行解析,因此我可以调整文件和格式。

问题:将语言字典读入代码字典需要很长时间才能在加载时完成。使语言词典成为静态 const 数据结构会导致 XCode 使用我所有的实际内存和等效交换 space 最终导致我的系统在大约 15GB 交换时无法使用。无论我是否尝试构建都会发生这种情况,并且似乎 XCode 扫描它以自动完成。

问题:有什么方法可以解决这种情况吗?某种不扫描静态字典文件的指令?一个不会被扫描的简单预编译库?另一种数据结构?

我试过的方法:我进行了大量分析并在打印语句中插入以确定语言词典加载是缓慢的部分。该代码是一个简单的获取下一行,添加到代码字典循环。静态字典 迄今为止我修复加载时间的最佳尝试。

我没试过的:静态数组和拆分字典都需要几乎完全重写。我不反对大规模重写,如果他们可能会解决问题。我查看了一个 plist,但似乎我也需要阅读它,但由于 XML,它会大得多。我考虑过学习 Core Data,但对于基本的大型查找来说似乎有些过分 table.

如果我已经在那里,这将是学习 Core Data 的一个很好的借口,但是,我正在努力 Swift 将高级概念强加到基本代码领域。

我通过更改语言词典生成器来创建 plist 来解决这个问题。然后我将其直接加载到 String:String 数据字典中。相比之下,速度快得惊人。

我仍在考虑优化的事情包括将其分成更小的部分,比如根据第一个或两个字母。如果它们足够小,比如在最慢的设备上加载半秒或更短时间,则可以在播放期间根据需要将它们加载到字典中。最终,后台加载可能会更好,但这完全是另一回事。