3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SwiftUI】Appプロトコルのリファレンスを読む

Last updated at Posted at 2020-11-10

#この記事は何か?
Apple DeveloperサイトのAppプロトコルを独自に翻訳・解釈したものです。

#アプリケーションの構造と振る舞い
Appプロトコルに準拠した構造体を作成してアプリを宣言し、そこに1つ以上のシーンを追加します。WindowGroupのようなビルトインシーンを使用することも、Sceneプロトコルに準拠したシーンを独自に作成することもできます。シーンは、アプリのユーザーインターフェースを定義するビュー階層を含み、システムが管理するライフサイクルを持っています。

CommandMenuインスタンスを適用して、シーンにメニューコマンドを追加します。CommandGroupを使用して、システムが提供するメニューを更新することもできます。コマンドにキーボードショートカットを提供すると、iOS、iPadOS、tvOSはそれらをキーコマンドとして利用できるようにします。

ウィジェットをアプリに追加するには、WidgetKitと連携してSwiftUIを使用することができます。ウィジェットは、アプリから関連するコンテンツへの迅速なアクセスを提供します。ウィジェットプロトコルに準拠した構造を定義し、ウィジェットのビュー階層を宣言します。

アクションを呼び出して、システムの他の部分とインタラクトします。たとえば、OpenURLActionインスタンスを使用してURLを開くことができます。

#Appプロトコル
アプリケーションの構造と振る舞いをモデル化します。

宣言
protocol App

###概要
アプリを作成するには、Appプロトコルに準拠した構造体を宣言します。
そして、アプリの内容を定義するために必要なbodyという名前の計算プロパティを実装します。

次のコードは、Appプロトコルに準拠する独自の構造体に@main属性を付けて、「アプリのエントリーポイント」を提供することを示します。

アプリケーションのエントリーポイントになるMyApp構造体
@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) // 監視オブジェクトとして、モデルを渡す
        }
    }
}
3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?