データを保存するのに SwiftData を使用し、初回アプリ起動時にモデルへの初期データを作成します。
モデルのレコードが0件の時に初期データを作成しています。

Storage : SwiftData を選択しておきます。


Category は、モデルクラスです。
ContentView には、Category を読み込みし、リスト表示しています。
初期データの作成処理も含みます。
//
// Category.swift
// SwiftDataTest02
//
// Created by Rue on 2024/10/02.
//
import Foundation
import SwiftData
@Model
final class Category {
var name: String
init(name: String) {
self.name = name
}
}
初期データの作成条件は、モデルのレコード数が0件(Empty:空)の時にしています。
データを一旦取得後に判定しますが、もっと良い方法があるかも知れません。。。
//
// ContentView.swift
// SwiftDataTest02
//
// Created by Rue on 2024/10/02.
//
import SwiftUI
import SwiftData
struct ContentView: View {
@Environment(\\.modelContext) private var modelContext
@Query private var categories: [Category]
var body: some View {
// レコードが0件の時に初期データを作成します。
if categories.isEmpty {
// 直接関数の実行ができないので、
// onAppear でコントール表示されるタイミングで
// 初期データの作成を呼び出しています。
Text("初期データを読み込み中です...")
.onAppear() {
createInitCategories()
}
}
else {
List(categories) { category in
Text(category.name)
}
}
}
/// 初期データの作成
func createInitCategories() {
let items = [
Category(name: "果物"),
Category(name: "野菜"),
Category(name: "魚"),
Category(name: "肉"),
Category(name: "調味料"),
]
for item in items {
modelContext.insert(item)
}
}
}
#Preview {
ContentView()
// 作成したモデルクラスをforに設定
.modelContainer(for: Category.self, inMemory: true)
}
プロジェクトソースで使用するモデルを ModelConfiguration に渡しています。
//
// SwiftDataTest02App.swift
// SwiftDataTest02
//
// Created by Rue on 2024/10/02.
//
import SwiftUI
import SwiftData
@main
struct SwiftDataTest02App: App {
var sharedModelContainer: ModelContainer = {
let schema = Schema([
// 作成したモデルクラスを追加
Category.self,
])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError("Could not create ModelContainer: \\(error)")
}
}()
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(sharedModelContainer)
}
}