Производительность 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)]
]