Производительность Swift компилятора

Я получил этот оператор в коде Swift, который вызывает ошибку при выполнении на игровой площадке:

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]]

Ошибка: expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

Затем я изменил тип элемента массивов на Double, который просто отлично работает.

Однако я спрашиваю себя, почему это происходит? Как я сказал, используя Double, он работает отлично. Поэтому я предполагаю, что Swift пытается угадать тип, и поэтому Double работает лучше в этом примере, чем Float.

Ответ 1

Ранее сообщалось о подобных проблемах, и, как я понимаю, проблема заключается в автоматическом выводе типа для "сложных" выражений. Вы должны указать отчет об ошибке в Apple.

Он компилируется со словарем одного цвета, но не с двумя.

В этом конкретном случае вы можете обойти это, преобразовывая каждое число в массиве в 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)]
]