【Swift4】Expression was too complex to be solved in reasonable time;というエラーが出た時の対処法
Swiftでは別の型同士の四則演算はできません。
基本的には型を揃えた状態での計算をしないと以下のようなエラーのなります。
Binary operator '+' cannot be applied to operands of type 'Int' and 'Float'
Binary operator '-' cannot be applied to operands of type 'Float' and 'CGFloat'
Binary operator '*' cannot be applied to operands of type 'CGFloat' and 'Double'
Binary operator '/' cannot be applied to operands of type 'Float' and 'Double'
短い計算であれば、上記のように別の型で計算しているというエラーになりますが、計算式が複雑になると以下のようなエラーになる場合があります。
Expression was too complex to be solved in reasonable time;
consider breaking up the expression into distinct sub-expressions
英訳すると「 計算が複雑すぎ、型の推論に時間がかかりました。
式を異なるサブ式に分割することを検討してください。」とのことです。
つまり、エラーなんだけど、計算式が複雑で、どの型とどの型で計算しようとしているのか詳しいエラーをだせないよ!という感じです。
Expression was too complex to be solved in reasonable time;というエラーが出た時の対処法
let a : Int = 1
let b : Float = 1.24
let c : CGFloat = 2.0
let d : Double = 3.14
//let z = a*2*3 + b/4/5 + (c+d)
// Expression was too complex to be solved in reasonable time;エラーとなる
let z = Float(a)*2*3 + Float(b)/4/5 + Float( Float(c) + Float(d))
// Float型にキャストしているのでエラーにならない
対処法は簡単で型を明示的にキャストしてあげることで防げます。
上記サンプルプログラムでは全ての変数をFloat()で明示的にキャストしています。
たったこれだけでエラーはでなくなります。