Loading...

SwiftUIでForEachを使うとエラーは出ないのにフリーズする問題の解決法

エラーの内容

SwiftUIで同じようなViewの繰り返しを作りたくてForEachを使った要素を作りました。
この時点では問題なく動いていました。

その後、似たようなViewを作るためにForEachのコードをまるごとコピーして別の場所に貼り付けました。

このコードを実行してそのViewを表示しようとした時にアプリがフリーズしてしまうようになりました。XCode上ではエラーメッセージは出ていません。

解決法

コピペしたForEachのコードを「⌘+クリック」してポップアップを出します。

「Embed in VStack」を一つをクリック。(HStackでも大丈夫)

私の場合はこれでフリーズしなくなりました。

理屈

ForEachはVStackなどと似た雰囲気を出しています。でも、実際は繰り返しのViewをいくつも並べて書いているのと同じです。

そのため、最上位のViewに書かれている場合はVStackなどで囲ってやる必要があります。囲まないと、たくさん作ったViewたちをどう並べたら良いかSwiftUIが判断できなくなってしまうようです。

最初からエラーメッセージを出してくれよって感じですが…。原因究明に数時間溶かした気がします。

(画像提供:Swift icon icon by Icons8
エラー 4126025930852726007
ホーム item