💽
【SwiftUI】FetchRequestをinit内で初期化する方法
はじめに
この記事の主張
- FetchRequestをinit内で行う
- 親Viewから渡された引数を、FetchRequestによってCore Dataのデータ抽出に利用する
本題
FetchRequestをinit内で行う
基本形は、以下のとおりです。
struct HistorySummarySheetView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest private var sessionList: FetchedResults<Sessions>
init() {
_sessionList = FetchRequest<Sessions>(
sortDescriptors: []
)
}
-
@FetchRequest
プロパティラッパーでCore Dataから取得するデータをSwiftUIのViewに反映させるための変数sessionList
を宣言します。 - 変数名
sessionList
の前に_
(アンダースコア)をつけることで、プロパティーラッパーにアクセスします。
親Viewから渡された引数を、FetchRequestによってCore Dataのデータ抽出に利用する
先ほどの基本形を使って、具体的な例を見てみましょう。
struct ChildView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest private var sessionList: FetchedResults<Sessions>
init(text: String) {
_sessionList = FetchRequest<Sessions>(
sortDescriptors: [NSSortDescriptor(keyPath: \Sessions.createdAt, ascending: true)],
predicate: NSPredicate(format: "content == %@", text),
animation: .default
)
}
上記の例では、親Viewからtext
という文字鉄を受け取って、init内で以下の条件のデータを抽出してsessionList
に割り当てています。
-
content
がtext
に一致する
まとめ
- FetchRequestをinit内で行う
- 親Viewから渡された引数を、FetchRequestによってCore Dataのデータ抽出に利用する
Discussion