RealmSwift (opens new window)

最近 RealmSwift のバージョンが上がったらしく、それに伴ってデータベースに保存するオプショナル型の扱いが変わりました。

調べてもドキュメントは 10.5.0 くらいまでしか対応してなかったので自分で新しいコーディング方法を調べました。

RealmProperty

今までRealmOptionalを使っていたものがRealmPropertyに変わりました。それだけでなく、ちょっとだけ宣言の方法も変わったのでそれもご紹介。

// Deprecated
let zipcode = RealmOptional<Int>()
// Modern
let zipcode = RealProperty<Int?>()
1
2
3
4
5

要するにRealmOptionalRealmPropertyに書き換えて、明示的にオプショナルであることを宣言するようにすれば良い。

IntだけじゃなくてBoolにも使える、便利。

Optionalだけじゃなくて他にもアップデートがあって、UUIDNSUUIDも新たに保存できるようになったようです。

Extension の書き方

型がIntではなくなったので Extension の書き方も変わりました。

例えば、強制的にアンラップするような以下のコードは次のように書き換えられます。

// Deprecated
extension RealmOptional where Value == Int {
    var intValue: Int {
        guard let value: Int = self.value else { return 0 }
        return value
    }
}
// Modern
extension RealmProperty where Value == Int? {
    var intValue: Int {
        guard let value: Int = self.value else { return 0 }
        return value
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

まあそれだけで特に面白いところはなかったのですが。

記事は以上。