Swift编译器性能

11

我在 Swift 代码中遇到了这个语句,当在 Playground 中执行时会出现错误:

let colors: [String: [Float]] = ["skyBlue" : [240.0/255.0, 248.0/255.0, 255.0/255.0,1.0], 
"cWhite" : [250.0/255.0, 250.0/255.0, 250.0/255.0, 1.0]]

错误是:表达式过于复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式

然后我将数组元素类型更改为Double,这样就可以正常工作。

但是,我在想为什么会出现这种情况? 正如我所说,使用Double可以正常运行。因此,我的猜测是Swift尝试猜测类型,因此在这个例子中DoubleFloat更好。


1
之前也有类似的问题报告,而且(据我所知)问题总是出在自动类型推断上。你应该在苹果公司提交一个错误报告。 - Martin R
感谢您的评论。但是,如果类型推断是问题所在,那么这并不是一个可以解决的错误,对吧?因为问题不在于我的列表,而在于类型推断模型本身。因为这个列表可以无限扩展更复杂的内容。 - dehlen
类型可以从上下文中推断出来,对于单一颜色的字典它是有效的,因此我认为这是一个错误(但我不是编译器专家)。在这种具体情况下,您可以通过将数组中的每个数字显式转换为Float来解决它:[Float(240.0/255.0), ... - Martin R
好的,谢谢。这将大大降低可读性,但似乎是正确的方法。我真的很想为你点赞。如果你能把它作为答案提供,我可以接受你的答案。不过还是谢谢 :) - dehlen
1个回答

3

类似问题之前已经有人报告过了,而且(我理解的是)问题在于“复杂”表达式的自动类型推断。你应该在苹果公司提交一个错误报告。

它可以编译一个颜色的字典,但不能编译两个。

在这种具体情况下,您可以通过显式将数组中的每个数字转换为Float来解决问题:

let colors = [
    "skyBlue" : [Float(240.0/255.0), Float(248.0/255.0), Float(255.0/255.0),Float(1.0)], 
    "cWhite" : [Float(250.0/255.0), Float(250.0/255.0), Float(250.0/255.0), Float(1.0)]
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接