ios - 使用 swift 在大量 map 上的 xcode 中构建时间极长

标签 ios xcode swift

我正在使用 xcode 7.2 和 swift 构建一个 iOS 应用程序。该应用程序使用由一系列 map 组成的数据库。它是一个包含所有元素(数组)及其相应同位素(数组内的图)的数据库。数组总共约 110 长,平均 map 约 23 长。因此,条目总数为 2600。构建该项目需要 20 多分钟。虽然数据库不小,构建项目应该不会花那么长时间,但 xcode 在做什么?

是我的语法错误还是我根本不应该使用映射数组并尝试使用 SQLite 解决方案?这会对数据库的读取速度产生巨大影响吗?

这是代码的摘录,整个文件看起来相同:

struct DataBase {
var knownIsotopes = [[Int:IsotopeData]]()
init() {
    knownIsotopes.append([
        1 : IsotopeData(name: "\(Constants.elementSymbols[0])\(1)", decayMode: [IsotopeData.DecayMode.BetaMinus], Z: 0, A: 1, halfLife: 613.9)])
    knownIsotopes.append([
        1 : IsotopeData(name: "\(Constants.elementSymbols[1])\(1)", decayMode: [IsotopeData.DecayMode.Stable], Z: 1, A: 1, halfLife: -1),
        2 : IsotopeData(name: "\(Constants.elementSymbols[1])\(2)", decayMode: [IsotopeData.DecayMode.Stable], Z: 1, A: 2, halfLife: -1),
        3 : IsotopeData(name: "\(Constants.elementSymbols[1])\(3)", decayMode: [IsotopeData.DecayMode.BetaMinus], Z: 1, A: 3, halfLife: 388789632),
        4 : IsotopeData(name: "\(Constants.elementSymbols[1])\(4)", decayMode: [IsotopeData.DecayMode.NeutronEmission], Z: 1, A: 4, halfLife: 276),
        5 : IsotopeData(name: "\(Constants.elementSymbols[1])\(5)", decayMode: [IsotopeData.DecayMode.NeutronEmission], Z: 1, A: 5, halfLife: 342),
        6 : IsotopeData(name: "\(Constants.elementSymbols[1])\(6)", decayMode: [IsotopeData.DecayMode.NeutronEmission], Z: 1, A: 6, halfLife: 96)])
    knownIsotopes.append([
        3 : IsotopeData(name: "\(Constants.elementSymbols[2])\(3)", decayMode: [IsotopeData.DecayMode.Stable], Z: 2, A: 3, halfLife: -1),
        4 : IsotopeData(name: "\(Constants.elementSymbols[2])\(4)", decayMode: [IsotopeData.DecayMode.Stable], Z: 2, A: 4, halfLife: -1),

最佳答案

如果您不想将此数据放入 PList 中(我同意这是这里的最佳实践),您可以通过使 IsotopeData 的初始化程序更智能一点(或创建一个方便的 init)来减轻编译器的工作量

用于组装名称的字符串插值对于编译器来说成本很高,并且可以完全由初始化程序在内部处理,因为它只是将元素的符号(元素编号 Z 的函数)与原子质量(本质上是A 的值:括号之间)。

您方便的 init 还可以接受一个简单的衰减模式值,而不是一个元素数组(它可以在内部创建一个数组)。

即使您的数据中存在这种模式的异常(exception)情况,减少大多数条目的负载也会有所帮助。

让编译器感到畏缩的另一件事是大型“文字”字典。该示例仅显示了 6 个条目的字典,但如果您有一些比这个大得多的字典,您可能需要以不同的方式初始化它们。

所有这些都会使编译器的工作变得更容易并减少编译时间。

[编辑] 从应用程序包中的 pList 读取的示例代码。

(将 pList 添加到 xCode 中的项目中)

let myList = NSDictionary(fromBundleFileName:"myList.plist") as! [String:NSDictionary]

根据您在 pList 中放入的内容,您的代码需要适本地使用字典(我的示例是字典的字典)。 pList 的第一层始终是字典,但您可以从各种键值中进行选择(包括嵌套字典)。

请注意,pList 实际上是 XML 文件,因此如果您尊重其标记结构,您也可以使用其他工具生成内容。

关于ios - 使用 swift 在大量 map 上的 xcode 中构建时间极长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091029/

相关文章:

等效的 iOS StackPanel

ios - 关闭 iOS 电源按钮上的应用程序关闭

ios - 在 TableView 上显示具有特殊字符的联系人时遇到问题

ios - Swift - 运算符 == 不能应用于两个 Int 操作数

ios - Xamarin Forms 检测屏幕是否处于事件状态和/或设备已锁定

ios - 为Xcode添加AppIcon(Ipad Pro应用程序图标)

ios - 如何修复 Xcode 中的 iOS 抖动错误?

ios - 我可以从实现文件创建 .xib 吗?

ios - 为什么我什至没有使用 Bolts 时会收到有关 Bolts 框架和 FacebookSDK 的错误?

ios - 仅当当前值大于存储值时才覆盖 Firebase DB 值