SwiftUIでForEachを使うとエラーは出ないのにフリーズする問題の解決法
https://waarumstudy.blogspot.com/2020/02/swiftuiforeach.html
エラーの内容
SwiftUIで同じようなViewの繰り返しを作りたくてForEachを使った要素を作りました。
この時点では問題なく動いていました。
その後、似たようなViewを作るためにForEachのコードをまるごとコピーして別の場所に貼り付けました。
このコードを実行してそのViewを表示しようとした時にアプリがフリーズしてしまうようになりました。XCode上ではエラーメッセージは出ていません。
この時点では問題なく動いていました。
その後、似たようなViewを作るためにForEachのコードをまるごとコピーして別の場所に貼り付けました。
このコードを実行してそのViewを表示しようとした時にアプリがフリーズしてしまうようになりました。XCode上ではエラーメッセージは出ていません。
解決法
コピペしたForEachのコードを「⌘+クリック」してポップアップを出します。
「Embed in VStack」を一つをクリック。(HStackでも大丈夫)
私の場合はこれでフリーズしなくなりました。
理屈
ForEachはVStackなどと似た雰囲気を出しています。でも、実際は繰り返しのViewをいくつも並べて書いているのと同じです。
そのため、最上位のViewに書かれている場合はVStackなどで囲ってやる必要があります。囲まないと、たくさん作ったViewたちをどう並べたら良いかSwiftUIが判断できなくなってしまうようです。
最初からエラーメッセージを出してくれよって感じですが…。原因究明に数時間溶かした気がします。
(画像提供:Swift icon icon by Icons8)