【Realm】データの読み込み(Read)処理の書き方

RealmをCRUD処理のうち、今回はデータの読み込み(Read)処理のやり方について紹介します。

Realmを使ってデータを取得する

1. 準備

RealmSwiftをインポートしておきます。

import RealmSwift

また、モデルを先に用意しデータが登録されている必要があります。

2. 全件取得

データベースから全件取得したい場合、次のように書きます。

//① Realmのインスタンス生成
let realm = try! Realm()

// ②全件取得
let result = realm.objects(モデルクラス名.self)

実際に書いてみると次のようになります。

let realm = try! Realm()

// 社員を全件取得
let result = realm.objects(Employee.self)

これで、社員の情報がすべて抽出できます。

3. 条件指定で取得

条件を設定するには filter()メソッド を使います。

① 文字列で条件文を書く方法

//① Realmのインスタンス生成
let realm = try! Realm()

// ②文字列で条件文を書いてデータを取得
let result = realm.objects(モデルクラス名.self).filter("クエリ")

実際に、社員モデルから30歳以上の社員を抜き出すとすると次のように書けます。

// Realmのインスタンス生成
let realm = try! Realm()

// 30歳以上の社員を取得
let result = realm.objects(Employee.self).filter("age >= 30")

② 条件文で使える演算子色々

●比較演算子

A == B AとBが等しい
A < B AはBより小さい
A > B AはBより大きい
A <= B AはB以下
A >= B AはB以上
A != B AとBが等しくない
A BETWEEN {10, 30} Aは10〜30の間の値

●パターン演算子

CONTAINS 指定した文字列を含む
BEGINSWITH 先頭が指定した文字列と一致する
ENDSWITH 末尾が指定した文字列と一致する
LIKE 曖昧検索

●論理演算子

AND 条件1、条件2が一致する
OR 条件1、条件2のいずれか、もしくは両方が一致。
NOT 条件に一致しない

英語ですが、Realmのサイトにチートシートがあるので、こちらをダウンロードしておくと便利です。

演算子のチートシート

4. 特定のカラム(変数)のみのデータが欲しい場合

import Foundation
import RealmSwift

class Person: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var age: Int = 0
}

例えば、上のようなモデルがあって、「name」だけのデータが欲しいという場合は次のようにvalue()メソッドを使用します。

//① Realmのインスタンス生成
let realm = try! Realm()

// ②nameだけ取得
let result = realm.objects(Person.self).value(forKey: "name")

5. ソート

取得結果の並び順を変えるには、sorted()メソッド を使用します。

//① Realmのインスタンス生成
let realm = try! Realm()

// ②ソート条件を追加
let result = realm.objects(モデルクラス名.self).sorted(byKeyPath: "プロパティ名", ascending: Bool値)

byKeyPathで何を基準に並び替えるのかプロパティをセットします。

ascendingは昇順に並べるかどうかで、昇順に並べたい場合はtrue、降順に並べたい場合はfalseをセットします。

例えば、次のように書くと、社員を若いものから年齢順に並べてデータを取得することが可能です。

let realm = try! Realm()

// 社員を全件取得
let result = realm.objects(Employee.self).sorted(byKeyPath: "age", ascending: true)
created by Rinker
¥3,168 (2022/05/20 13:00:36時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA