読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Realm Swiftを使って複数の条件でソート(並べ替え)する

本記事ではRealm Swiftを使って複数条件でソートする方法を紹介します。使用しているRealm Swiftのバージョンは0.97.0です。

たとえば、Userというオブジェクトがあります。Userクラスは下記のように定義しています。

import RealmSwift

class User : Object {
    // ユーザーのID
    dynamic var id = ""

    // オンライン状態
    dynamic var isOnline = false

    // 前回のオンライン時刻
    dynamic var onlineDate = NSDate(timeIntervalSince1970: 1)
}

オフライン状態のユーザーを「前回のオンライン時刻を降順」「IDを昇順」という2つの条件でソートしてみましょう。

並び替えをする

条件が1つの場合のソートです。

let result = try! Realm().objects(User).sorted("id", ascending: true)

オンラインのユーザーのみを抽出して並び替えています。

let result = try! Realm().objects(User).filter("isOnline=true").sorted("id", ascending: true)

オフラインのユーザーのみを抽出して、前回のオンライン時刻が新しい順(降順)かつIDの古い順(昇順)で並び替えています。

let sortProperties = [
    SortDescriptor(property: "onlineDate", ascending: false),
    SortDescriptor(property: "id", ascending: true) ]

let result = try! Realm().objects(User).filter("isOnline=false").sorted(sortProperties)