Xcode
Swift
Realm

Realm「基礎」の「基礎以外」

Realmでよく使うけどあんまり書かない集?

全くコアではないが必ず使うわけでもないくらいのものをメモしていこうと。

ソート

realm = try! Realm()
var questions = realm.objects(Question.self)
//byKeyPathに並び替えたいものを入れる
var sortedQuestions = questions.sorted(byKeyPath: "registeredDay")
//逆順
var sortedQuestions = questions.sorted(byKeyPath: "registeredDay", ascending: false)

昇順(ascending)、降順のイメージ

昇順(asc) 1 2 3
降順(desc) 3 2 1

マイグレーション

AppDelegate.swift
// AppDelegate.swiftのapplication(application:didFinishLaunchingWithOptions:)の中に書く

let config = Realm.Configuration(
    // 新しいデータベース構造のバージョンを宣言。
    //バージョンは以前使っていたバージョンよりも大きいものにする(まだマイグレーションをしたことがないときのバージョンは0)
    schemaVersion: 1,
    // 新しいバージョンに書き換えらる時に自動的に呼ばれるブロックを引数に渡す
    migrationBlock: { migration, oldSchemaVersion in
        // まだマイグレーションをしたことがないのでoldSchemaVersion == 0
        if (oldSchemaVersion < 1) {
            //ここにマイグレーションする時のコードを書く
            migration.enumerateObjects(ofType: Person.className()) { oldObject, newObject in
                // 昔のオブジェクトのカラムを用いて新しいオブジェクトのカラムを生成
                // この場合firstNameとoldNameから一つのカラムにまとめている
                let firstName = oldObject!["firstName"] as! String
                let lastName = oldObject!["lastName"] as! String
                newObject!["fullName"] = "\(firstName) \(lastName)"
            }
        }
    })

// デフォルトで呼ばれるRealmに今回設定したバージョンのものを設定
Realm.Configuration.defaultConfiguration = config

// これでマイグレーションは完成したのでもうRealm()を呼べる
let realm = try! Realm()