SwiftUIにおけるSceneは、アプリの主要な構造を定義するためのプロトコルです。Sceneプロトコルは、アプリのウィンドウやドキュメントを管理し、それらに表示するコンテンツを提供します。

Sceneとは?
Sceneは、アプリケーションのルート構造を定義するためのプロトコルです。iOSやmacOSのアプリケーションでは、通常、アプリのエントリーポイントとしてAppプロトコルを実装しますが、その中でSceneを使用して、アプリのウィンドウやドキュメントの構造を定義します。
基本的な使い方
以下は、基本的なSceneの実装例です。
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}この例では、WindowGroupというシーンが定義されており、その中にContentViewが表示されます。
WindowGroupは、ウィンドウを管理するためのシーンで、iOSやmacOSのアプリケーションでよく使われます。
主なSceneの種類
WindowGroup
WindowGroupは、複数のウィンドウを持つことができるシーンです。iPadやMacでウィンドウのマルチタスキングをサポートするために使用されます。
WindowGroup {
ContentView()
}DocumentGroup
DocumentGroupは、ドキュメントベースのアプリケーションのためのシーンです。複数のドキュメントを開いたり、管理したりするアプリに適しています。
DocumentGroup(newDocument: MyDocument()) { file in
ContentView(document: file.$document)
}WindowGroupとDocumentGroupに関しては以下の記事でも説明しています
Sceneのカスタマイズ
Sceneは、onAppearやonDisappearなどのモディファイアを使用して、ライフサイクルイベントに応じて動作をカスタマイズすることができます。
WindowGroup {
ContentView()
.onAppear {
print("Scene appeared")
}
.onDisappear {
print("Scene disappeared")
}
}複数のSceneの定義
一つのアプリで複数のSceneを定義することも可能です。例えば、ウィンドウグループとドキュメントグループを同時に持つアプリを作成することができます。
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
MainView()
}
DocumentGroup(newDocument: MyDocument()) { file in
DocumentView(document: file.$document)
}
}
}まとめ
Sceneは、SwiftUIアプリの主要な構造を定義するための重要なコンポーネントです。WindowGroupやDocumentGroupを使用して、ウィンドウやドキュメントを管理し、アプリケーションの異なる部分にコンテンツを表示することができます。
これらの基本概念を理解することで、より複雑なアプリケーションを構築するための基盤を築くことができます。


