我在这里阅读了许多有关“表达式太复杂而无法在合理的时间内解决;请考虑将表达式分解为不同的子表达式” 的错误,它们会归结为重载运算符(尤其是+)和类型推断需要很长时间才能编译。答案通常是确实将令人讨厌的表达式分解为多个片段,或者将其显式地包含在类型中。我的问题似乎有所不同。
let someSet: Set<String> = [
"aardvark",
"aardvarks",
"abaci",
"aback",
// ... 81,000 more words ...
"zygote",
"zygotes",
"zygotic",
"zymurgies",
"zymurgy",
]
我想在编译时而不是在运行时预填充Set,以节省加载时间,而且这似乎是一种将大量数据输入我的应用程序的简单方法。在出现上述错误之前,该文件将编译10分钟(使用3个进程使用100%CPU)。我看不到任何表达式可以分解,并且我对类型很明确。有建议吗?
答案 0 :(得分:2)
将单词放入JSON文件中,并在应用启动时将其导入到集合中。
答案 1 :(得分:1)
大字面量在Swift中并不起作用。如果您想要这么大的文字,则需要将其存储在文件中并读取。在这种情况下,我建议使用JSON格式。
创建一个名为myData.json或其他名称的json文件并编写文字:
[
"aardvark",
"aardvarks",
"abaci",
"aback",
// ... 81,000 more words ...
"zygote",
"zygotes",
"zygotic",
"zymurgies",
"zymurgy"
]
幸运的是,JSON数组语法与Swift数组文字几乎相同!
现在您可以像这样读取文件:
if let path = Bundle.main.url(forResource: "myData", withExtension: "json"), let data = try? Data(contentsOf: path) {
let decoder = JSONDecoder()
if let stringArray = try? decoder.decode([String].self, from: data) {
let someSet = Set(stringArray)
}
}