[Xcode]条件分岐が多すぎる際のエラー[SwiftUI]

iOSアプリ

“The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions”

アプリを作っていたらこんなエラーが出てきました。

このエラーは、「この表現はコンパイルに時間がかかりすぎるから、もうちょっと分かりやすく書いて」というものです。

私が解決できた方法を紹介します。

スポンサーリンク

原因

まず、私のコードの原因は、「if文の条件分岐が多かったこと」でした。

           if score <= 11 {
                VeryLowView()
            } else if score <= 22{
                LowView()
            } else if score <= 33 {
                AverageView()
            } else if score <= 44 {
                HighView()
            } else if score <= 55 {
                VeryHighView()
            }

if文の条件分岐が多くなると、コンパイラが解読するのが大変になってしまい、結果エラーが出るのです。

「どのくらいの条件分岐からエラーが出るのか?」

を調べてみたのですが、大体4つ目ぐらいから怪しくなってきます。

なので、ifの条件分岐は3つのぐらいに収まるようにすればいいでしょう。

スポンサーリンク

switch文

ソース コード, コード, プログラミング, C言語, コーディング, デジタル, ソフトウェア

条件分岐が多すぎるのは、switch文を使うことで解決しました。

今回のは、コンパイラ自体が理解に時間がかかりすぎて、起こるエラーです。

「if文の条件分岐が多ければ、switch文で書いた方がいい」

というのは正しいのですが、実はswitch文はコンパイルにかかる時間も短くなるのです。

なので、今回のエラーは、if文をswicth文に書き換えれば解決できます。

以下は先程のエラーが出たコードを書き換えた例です。

switch score {
            case 0...11:
                VeryLowView()
            case 12...22:
                LowView()
            case 23...33:
                AverageView()
            case 34...44:
                HighView()
            case 45...55:
                VeryHighView()
            default:
                AverageView()
            }

内容自体は同じコードですが、エラーが出ませんでした。

if文よりswitch文の方が速くなるのは、比較を評価する回数の問題です。あまり深くは触れませんが、switch文の方がif文よりも回数が少なくて済むのです。

スポンサーリンク

まとめ

“The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions”

もし、このエラーを出していたコードがif文で複数の条件分岐をしていたなら、swicth文に切り替えてみて下さい。

コンパイラが理解しやすくなり、エラーが解消されるかもしれません。


コメント

タイトルとURLをコピーしました