#この記事は何か?
Apple DeveloperサイトのAppプロトコルを独自に翻訳・解釈したものです。
#アプリケーションの構造と振る舞い
App
プロトコルに準拠した構造体を作成してアプリを宣言し、そこに1つ以上のシーンを追加します。WindowGroup
のようなビルトインシーンを使用することも、Scene
プロトコルに準拠したシーンを独自に作成することもできます。シーンは、アプリのユーザーインターフェースを定義するビュー階層を含み、システムが管理するライフサイクルを持っています。
CommandMenu
インスタンスを適用して、シーンにメニューコマンドを追加します。CommandGroup
を使用して、システムが提供するメニューを更新することもできます。コマンドにキーボードショートカットを提供すると、iOS、iPadOS、tvOSはそれらをキーコマンドとして利用できるようにします。
ウィジェットをアプリに追加するには、WidgetKit
と連携してSwiftUI
を使用することができます。ウィジェットは、アプリから関連するコンテンツへの迅速なアクセスを提供します。ウィジェットプロトコルに準拠した構造を定義し、ウィジェットのビュー階層を宣言します。
アクションを呼び出して、システムの他の部分とインタラクトします。たとえば、OpenURLAction
インスタンスを使用してURLを開くことができます。
#Appプロトコル
アプリケーションの構造と振る舞いをモデル化します。
protocol App
###概要
アプリを作成するには、App
プロトコルに準拠した構造体を宣言します。
そして、アプリの内容を定義するために必要なbody
という名前の計算プロパティを実装します。
次のコードは、App
プロトコルに準拠する独自の構造体に@main
属性を付けて、「アプリのエントリーポイント」を提供することを示します。
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
Text("Hello, world!")
}
}
}
App
プロトコルは、システムがアプリを起動するために呼び出すmain()
メソッドのデフォルトの実装を提供します。アプリのすべてのファイルの中に、正確なエントリーポイントを1つにすることができます。
「Scene
プロトコルに準拠するインスタンス」からアプリのボディを構成します。各シーンは「ビュー階層のルートビュー」があり、と「システムによって管理されるライフサイクル」を持っています。
SwiftUIは、ドキュメントや設定画面を表示するような一般的なシナリオを扱うために、いくつかの具体的なシーンタイプを提供しています。カスタムシーンを作成することもできます。
@main
struct Mail: App {
var body: some Scene {
WindowGroup {
MailViewer()
}
Settings {
SettingsView()
}
}
}
アプリ内で「ステート」を宣言すると、すべてのシーンで共有することができます。
たとえば、StateObject
属性を使用してデータモデルを初期化して、ObservedObject
として入力するビューのモデル、あるいはEnvironmentObject
としての環境をアプリ内のシーンに提供できます。
@main
struct Mail: App {
@StateObject private var model = MailModel()
var body: some Scene {
WindowGroup {
MailViewer()
.environmentObject(model) // 環境オブジェクトを介して、モデルを渡す
}
Settings {
SettingsView(model: model) // 監視オブジェクトとして、モデルを渡す
}
}
}