
SwiftUIを触り始めると必ず出会うのが、以下のコードです。
「これはいったい何をしているんだろう?」と最初に疑問を持つ方は多いと思います。
この記事では、ContentView 構造体と body プロパティが何を意味するのかを丁寧に解説します。
1. struct ContentView: View とは?
ContentView は Swiftの構造体型です。
さらに : View と書くことで、SwiftUIが用意している View プロトコルに準拠しています。
つまり ContentView は「SwiftUIにおける1つの画面(UI部品)」を表現しているわけです。
- struct ContentView → 型定義(画面を表す設計図)
- : View → SwiftUIのViewプロトコルに準拠(画面部品として利用可能にする)
2. var body: some View の意味
View プロトコルに準拠するには、body プロパティを必ず実装しなければなりません。
この body が、その画面が描画する中身を表します。
この場合、返しているのは Text 型。
でも戻り値の型は some View となっています。
3. some View とは?
some は 不透明な戻り値型(opaque return type) を意味します。
- body が返す具体的な型(Text, VStack> など)はコンパイラは知っている
- しかし呼び出し側には「Viewプロトコルに準拠した何か」とだけ伝える
これにより、コードはシンプルに保たれ、内部では最適化された具体型が使われます。
4. 実際の型はどうなっている?
例えば以下のように複数の要素を配置すると……
実際の返り値の型はとても複雑です。
これを毎回書くのは現実的ではないため、some View が使われています。
5. スタック構造による画面遷移
SwiftUI では NavigationStack を使うことで画面遷移を管理します。
これは内部的に「スタック(積み重ね)」の仕組みを持っていて、push(積む) と pop(戻る) が可能です。
- NavigationStack → 遷移履歴を管理する枠組み
- NavigationLink → 「次の画面へ進む」ボタン
戻るボタンが自動的に表示されるのは、このスタック構造のおかげです。
6. まとめ
- ContentView は「1つの画面」を表す構造体
- body はその画面の中身を返す必須プロパティ
- some View は「具体的な型を隠してView準拠の何かを返す」仕組み
- 複数のUI要素を組み合わせると、実際の型は非常に複雑
- NavigationStack があるから push/pop で画面遷移や戻る処理が実現できる