アプリの設計が語られるときなど、非同期処理の状態管理がしっかり考慮されずにサンプルコードが書かれ解説されていることが多い気がするので、こうした方が良いんじゃないかというのを自分なりにまとめておきます。 一言で書くと、「非同期処理は隠蔽して、その状態を値で表現しよう」です。 なお、この記事での「非同期処理」は「メインスレッドから呼び出されて、別のスレッドで処理が実行されたり待ちが発生して、その完了や結果を遅延してメインスレッドで受け取るまでの一連の流れ」と捉えてもらえると良いと思います。 Viewが非同期処理の状態管理をしている例 例えば、通信処理のような非同期処理を想定して、非同期処理を開始して結果が返ってくるまではインジケータを表示したりUI操作をできなくしたいとします。以下のようなUIの流れです。 import SwiftUI // 非同期処理の結果 enum Result { cas