前の2つの記事
【SwiftUI】Core Dataの使い方:検索編(1/3)
【SwiftUI】Core Dataの使い方:検索編(2/3)
では、SwiftUIの特徴であるデータバインディングの仕組みを使い、検索結果とViewを紐付ける方法を紹介しました。これにより、検索結果に応じてViewが自動で再描画されます。
しかし、検索結果を別の処理のインプットに使う場合など、必ずしもViewに紐付ける必要が無いケースもあります。
本記事では、そのような場合の検索方法を紹介します。
環境
この記事の情報は次のバージョンで動作確認しています。
【Xcode】12.4
【Swift】5.3.2
【iOS】14.4
【macOS】Big Sur バージョン 11.1
【Swift】5.3.2
【iOS】14.4
【macOS】Big Sur バージョン 11.1
データ取得処理
データバインディングを伴わないデータ取得処理は、【SwiftUI】Core Dataの使い方:検索編(1/3) で既に使っていました。
初期データの登録処理(RegistSampleData.swift)の次の部分です。
1 2 3 4 5 6 7 8 9 |
/// Studentテーブル全消去 let fetchRequest = NSFetchRequest<NSFetchRequestResult>() fetchRequest.entity = Student.entity() let students = try? context.fetch(fetchRequest) as? [Student] for student in students! { context.delete(student) } |
Studentテーブルを検索して、全てのレコードを削除する処理です。
1行目で検索条件(フェッチリクエスト)を格納するプロパティを生成。
2行目で検索対象として Studentエンティティを設定。
3行目ではNSManagedObjectContextの fetch() を呼び出し、検索結果をプロパティ students に格納しています。students は Studentエンティティの配列型になります。
とても簡単ですね。
ソート順の指定
ソート順は@FetchRequestの時と同様、NSSortDescriptorクラスを使って指定します。
使い方は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 |
let fetchRequest = NSFetchRequest<NSFetchRequestResult>() fetchRequest.entity = Student.entity() /// 生徒の名前順にソート fetchRequest.sortDescriptors = [ NSSortDescriptor(keyPath: \Student.name, ascending: true) ] let students = try? context.fetch(fetchRequest) as? [Student] |
抽出条件の指定
抽出条件は NSPredicate クラスを使って指定します。
使える形式も @FetchRequest の時と同様です。
1 2 3 4 5 6 7 8 9 |
let fetchRequest = NSFetchRequest<NSFetchRequestResult>() fetchRequest.entity = Student.entity() /// 欠席日数が5日以上の生徒を抽出 fetchRequest.predicate = NSPredicate(format: "absentDays => %d", 5) let students = try? context.fetch(fetchRequest) as? [Student] |
合わせて読みたい記事
【SwiftUI】Core Dataの使い方:標準テンプレートを読み解く
(2023/03/25 更新) SwiftUIでのCore Dataの使い方を、標準テンプレートを読み解きながら解説します。
【SwiftUI】Core Dataの使い方:エンティエィ(Entity)を定義する
(2021/04/26 更新) Xcodeでエンティティを定義する方法を解説します。
【SwiftUI】Core Dataの使い方:準備編
SwiftUIでCore Dataを扱うための前提知識と、新規プロジェクトの作成方法について解説します。
【SwiftUI】Core Dataの使い方:基本編
SwiftUIでCore Dataの基本的な使い方を簡単なTodoリストアプリを例に解説します。
【SwiftUI】Core Dataの使い方:検索編(1/3)
データベースを検索して、オブジェクトとして取得するfetch処理について解説します。 を先に見ておくことをおすすめします。
【SwiftUI】Core Dataの使い方:検索編(2/3)
検索条件を動的に変更する方法を解説します。 の続編です。
【SwiftUI】Core Dataの使い方:リレーションシップ編
リレーションシップを使ってエンティティ同士をリンクする方法を解説します。