Swift Xcode 12慢速生成一个文件
我的Xcode项目中的数据结构与此类似:Swift Xcode 12慢速生成一个文件,swift,xcode,Swift,Xcode,我的Xcode项目中的数据结构与此类似: struct Group: { let name: String var items: [Thing] } struct Thing: { let description: String let variants: [Thing]? } var data: [Group] = [Group(name: "Group 1", items: [Thing(description: &quo
struct Group: {
let name: String
var items: [Thing]
}
struct Thing: {
let description: String
let variants: [Thing]?
}
var data: [Group] =
[Group(name: "Group 1",
items: [Thing(description: "Thing 1", variants: nil),
Thing(description: "Thing 2", variants: nil),
... ]),
Group(name: "Group 2",
items: [Thing(description: "AnotherThing 1", variants: [Thing(description: "Variant Thing1)",
Thing(description: "Variant Thing2)",
... ]),
Thing(description: "AnotherThing 2", variants: [Thing(description: "Variant Thing 101"),
Thing(description: "Variant Thing 102"),
... ]),
... ])]
总共有大约10组,包含大约3200件物品;在“items”数组和“variants”数组中,对象的分布是相等的
Xcode需要3到5分钟来编译这个文件。我该怎么做才能将此缩短到合理的时间
旁白:除了编译速度慢之外,这种数据结构还使Xcode分析器变得疯狂。探查器通常会占用所有交换空间并使机器崩溃。尝试将分配更改为
var data: [Group] = [Group(name: "Group 1", ....
根据我的经验,这些减速主要是由于类型推断,显式指定类型会有很大帮助
如果这不起作用,请遵循Joakim Danielson的建议。我并没有完全按照matt的建议去做,但他的建议让我找到了一种方法来做,而且不要太难看
struct Thing: {
let description: String
var variants: [Thing]?
}
struct Group: {
let name: String
var items: [Thing]
}
let group1Things: [Thing] = [
Thing(description: "Thing 1", variants: nil),
Thing(description: "Thing 2", variants: nil),
... ]
let group1: Group = Group(name: "Group 1", items: group1Things)
let group2Things: [Thing] = [
Thing(description: "AnotherThing 1", variants: [Thing(description: "Variant Thing1)",
Thing(description: "Variant Thing2)",
... ]),
Thing(description: "AnotherThing 2", variants: [Thing(description: "Variant Thing 101"),
Thing(description: "Variant Thing 102"),
... ]
let group2: Group = Group(name: "Group 2", items: group2Things)
let data: [Group] = [group1, group2, ...]
这使编译时间从3-5分钟缩短到30秒。我可以接受。我可能可以通过分解“变体”数组来进一步了解它。我不知道该如何处理该结构,但我想知道如果将其存储为json,然后在运行时对其进行解码,会发生什么?编译是即时的,我想,但我不知道解码是否会成为一个问题。我会尝试一下,但我真的希望有一个解决方案的结构。或者至少了解问题所在。只需使用连续的附录,而不是大的文本。请参阅和。基本上,编译器不喜欢大的文本,所以不要写它们。实际上我已经试过了,但没有用。我将相应地编辑原始帖子。毫无疑问,类型推断是个问题,因为我尝试了您在这里和那里看到的Xfrontend标志;我就是不知道怎么修。