SwiftData

SwiftDataでは、宣言コードを使用することで、データの永続化を簡単に行えます。データの照会やフィルタリングは、通常のSwiftコードを使って行うことができます。またSwiftDataは、SwiftUIとシームレスに連携するように設計されています。

新機能

SwiftDataは、純粋なSwiftコードを使用してアプリのデータをモデル化および永続化するための表現力豊かで軽量なAPIを提供します。新しいAPIでは、カスタムデータストアを構築できるほか、トランザクション履歴、モデルインデックス、複合一意性制約なども利用できます。

最新のビデオを見る

Swiftでモデルを作成する

通常のSwiftの型で@Modelを使えば、追加のファイルやツールを管理することなく、データをモデル化することができます。SwiftDataは多くの関係を自動的に推測でき、制約は、#Uniqueのような明確な宣言を使用して記述することができます。SwiftUIと同様、外部ファイルの情報やツールは必要ありません。

@Model
class Recipe {
	@Attribute(.unique) var name: String
	var summary: String?
	var ingredients: [Ingredient]
}

自動永続化

SwiftDataは、モデルを使用してカスタムスキーマを構築し、そのフィールドを基盤となるストレージに効率的にマッピングします。SwiftDataによって管理されるオブジェクトは、必要に応じてデータベースから取得され、適切なタイミングで自動的に保存されます。追加の作業は必要ありません。ModelContext APIを使用して、完全にコントロールすることもできます。

カスタムデータストア

SwiftDataではデフォルトで、Core Dataを利用して永続化が行われますが、新しいDataStoreプロトコルを使用して独自の永続化レイヤを実装することも可能です。DataStoreを使用することで、SwiftData APIはJSONファイルからWebサービス、データベースエンジンまで、さまざまな種類の永続化に対応できます。その際、SwiftUIおよびSwiftDataのモデリングコードを変更する必要はありません。

SwiftUIとの統合

データを取得するには、SwiftUIビューで@Queryを使用します。基礎となるデータが変更されると、SwiftDataとSwiftUIは連携して、リアルタイムでビューを更新します。手動で結果を更新する必要はありません。

@Query var recipes: [Recipe]
var body: some View {
	List(recipes) { recipe in
		NavigationLink(recipe.name, destination: RecipeView(recipe))
	}
}

Swiftネイティブのプレディケート

Swiftネイティブの型を使用してデータの照会やフィルタリングを行うことができます。これらはコンパイラによってチェックされるため、開発の早い段階で問題を特定できます。プレディケートは、式が基盤となるストレージエンジンにマッピングできない場合、コンパイル時エラーを表示します。

let simpleFood = #Predicate<Recipe> { recipe in
	recipe.ingredients.count < 3
}

CloudKitの同期

データはDocumentGroupを使用してファイルに保存し、iCloud Drive経由で同期できるほか、CloudKitを使用してデバイス間で同期することもできます。

Core Dataとの互換性

SwiftDataは、Core Dataの実証済みのストレージアーキテクチャを使用しているため、同じ基盤ストレージを利用して、同じアプリ内で両方を使用することができます。準備が整ったら、XcodeはCore DataモデルをSwiftDataで使用するためのクラスに変換することができます。