【问题标题】:Swift Array size limit and Xcode compile limitsSwift 数组大小限制和 Xcode 编译限制
【发布时间】:2015-09-27 23:17:42
【问题描述】:

我已经提取了 OSX 英语词典并想在我的 Swift iPhone 应用程序中使用它。它有大约 236,000 个单词,我已添加到 swift 字符串数组中。

当我尝试运行构建时,编译需要很长时间然后抛出Segmentation Fault 11

是不是数组太大了?

尝试在我的项目中添加英语词典时,我是否走在正确的道路上?

【问题讨论】:

  • 你能把你的代码贴在这里吗?尤其是for循环部分
  • 英文词典是你源代码的一部分,还是你把它作为资源添加并从文件系统中读取?
  • 一个英语单词平均有 7 个字符。 236K 字占用 1.5MB。这不算太大,即使在 iOS 设备上也是如此。
  • 我什至还没有实现 for 循环。我只是声明了包含 236,000 个字符串的数组。它在 swift 文件中,而不是单独的资源文件中。
  • swift文件大约2.5MB

标签: ios arrays xcode swift


【解决方案1】:

您可能不应该将其存储为单个字符串。您可以使用更高效的数据结构,例如trie。您还应该考虑不要一次性将整个内容加载到内存中,而是能够从文件系统中对其进行导航。

【讨论】:

  • 正如我自己回答的那样,我能够解决这个问题,但循环遍历数组仍然需要大约 0.2 秒左右,这对于我的应用程序来说很慢。我喜欢 trie 的想法,但这个概念对我来说是新的,我不知道如何在 SWIFT 中实施它。我需要额外的框架或扩展来完成它吗?
【解决方案2】:

我能够通过将实际的字典文本文件添加到我的 xcode 项目中来解决这个问题。然后利用下面的代码将文件中的单词填充到数组中。它非常快。

let path = NSBundle.mainBundle().pathForResource("dict2", ofType: "txt")
let dico = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)
let dict = dico!.componentsSeparatedByString("\n")

希望对某人有所帮助。

【讨论】:

  • 我面临着类似的问题@Kashif 是“dict2”支持文件“dict2.txt”吗?
  • 我只是将 dict2.txt 拖到我的项目中,并确保它的目标被选中
猜你喜欢
  • 2023-04-02
  • 2016-06-27
  • 2012-05-13
  • 2011-10-24
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多