SwiftUIにCore Dataの使用 データ取得

Core Data導入

Core Dataを使うため、プロジェクト作成時「Use Core Data」をチェックする。f:id:machinemxy:20191207193649p:plain

プロジェクト作成後、拡張子「.xcdatamodeld」が自動作成される。その中にEntityを作成する。 f:id:machinemxy:20191207210150p:plain

データの取得

@FetchRequest(
    entity: Singer.entity(), 
    sortDescriptors: [
        NSSortDescriptor(keyPath: \Singer.firstName, ascending: true), 
        NSSortDescriptor(keyPath: \Singer.lastName, ascending: true)
    ], 
    predicate: NSPredicate(format: "%K BEGINSWITH[c] %@", "lastName", "a")
) var singers: FetchedResults<Singer>

その中、sortDescriptorsはSQLのORDER BYと等価、predicateはWHEREと等価。
%Kはキーのプレースホルダー、%@はパラメータのプレースホルダー。[c]は大小文字無視という意味。
だから完全の意味はlastNameは"A"または"a"から始まるSingerを取り出す、ソート順はfirstNameの昇順とlastNameの昇順であること。
BEGINSWITHと似ている使い方はENDSWITHとCONTAINSがある。他の比較符はSQLと一致。BETWEENを使う場合、パラメーターは[0, 100]のような二つ元素の数列が必要。
先にvar singers: FetchedResults<T>を定義して、後で検索結果を与えるのも可能です。

singer = FetchRequest(
    entity: Singer.entity(), 
    sortDescriptors: [
        NSSortDescriptor(keyPath: \Singer.firstName, ascending: true), 
        NSSortDescriptor(keyPath: \Singer.lastName, ascending: true)
    ], 
    predicate: NSPredicate(format: "%K BEGINSWITH[c] %@", "lastName", "a")
).wrappedValue

プロジェクト作成した時点、まだ何もデータが存在していない。この時データ取得しようとしても0件になる。次回は新規データ作成の方法を紹介します。