ModelContainerクラス
アプリのスキーマとモデルストレージの構成を管理するオブジェクト
Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
また、Swiftプログラミングを基礎から動画で学びたい方には、Udemyコース「今日からはじめるプログラミング」をお勧めします。
概要
モデルコンテナは、モデルコンテキストとアプリの永続ストレージを仲介します。
モデルコンテナはストレージを総合的に管理し、一貫性と使用可能な状態の維持を保証します。
フェッチを実行するか、モデルコンテキストのsave()
メソッドを呼び出すたびに、モデルコンテナはスキーマに基づいて、実際にデータの読み取りや書き込みを実行します。
これによって、フェッチや保存が効率的に調整された方法でのみ行われて、アプリのリソースが保護されることを保証します。
さらに、アプリがCloudKitに対応している場合は、モデルコンテナがデバイス間の永続ストレージを自動的に同期します。
アプリスキーマの発展とともに、コンテナは永続モデルデータを自動的に移行してモデルクラスと一致させ続けます。
異なるスキーマのバージョン間の集約変更が自動移行の機能を超える場合は、コンテナにSchemaMigrationPlan
を提供して移行に参加し、正常に完了できるようにします。
For example, you may want use a particular app group container or specify that the storage is ephemeral and should exist only in memory.
デフォルトでは、モデルコンテナは「アプリの永続ストレージをどのように設定するか」について、仮説を立てます。
この前提動作をカスタマイズするには、コンテナにModelConfiguration
インスタンスを提供します。
例えば、アプリのグループコンテナを使用したり、ストレージを一時的にしたり、データの存在をメモリ上に制限したりすることを指定できます。
Additionally, the view modifier makes an associated model context available in the SwiftUI environment, which the Query()
macro depends on.
SwiftDataを使用するアプリには、少なくとも1つのモデルコンテナが必要です。
クラスのイニシャライザまたは対応するSwiftUIビューモディファイアを使用して、コンテナを作成します。
ビューモディファイアを使用すると、適用したウィンドウグループ内の全ウィンドウ、または適用したビュー階層に属する全ビューが共通のモデルコンテナにアクセスできます。
さらに、ビューモディファイアは、@Query
マクロが適用されたSwiftUIビュー環境でモデルコンテキストを利用できるようにします。
@main
struct RecipesApp: App {
var body: some Scene {
WindowGroup {
RecipesList()
}
.modelContainer(for: Recipe.self)
}
}
// レシピのリスト
struct RecipesList: View {
@Query private var recipes: [Recipe]
var body: some View {
List(recipes) { RecipeRowView($0) }
}
}
参考
Apple Developer Documentation