🕷️
【SwiftData】様々な型のデータを管理できる汎用的なクラスの作成
はじめに
コードの再利用性を高め、アプリケーション全体のデータ管理の簡素化を目的としています。
コード
import SwiftData
class ModelManager<T: PersistentModel> {
private var container: ModelContainer?
init() {
self.container = try? ModelContainer(for: T.self)
}
func deleteAll() async {
guard let container = self.container else { return }
let context = ModelContext(container)
do {
try context.delete(model: T.self)
try context.save()
} catch {
print("全データの削除に失敗しました: \(error)")
}
}
func addItem(data: T) async {
guard let container = self.container else { return }
let context = ModelContext(container)
context.insert(data)
do {
try context.save()
} catch {
print("データの保存に失敗しました: \(error)")
}
}
func fetchAll() -> [T] {
guard let container = self.container else { return [] }
let context = ModelContext(container)
do {
let descriptor = FetchDescriptor<T>()
return try context.fetch(descriptor)
} catch {
print("データの取得に失敗しました: \(error)")
return []
}
}
}
使用例
import SwiftData
@Model
class User {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
// インスタンスの作成
let userManager = ModelManager<User>()
// ユーザーの追加
await userManager.addItem(User(name: "Alice", age: 30))
// すべてのユーザーの取得
let allUsers = userManager.fetchAll()
// すべてのユーザーの削除
await userManager.deleteAll()
Discussion