酢ろぐ!

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

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

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

Realm Javaでの複数条件のソートしたい場合、「Realm Javaを使って複数の条件でソート(並べ替え)する - 酢ろぐ!」の記事をご覧ください。

たとえば、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 realm = try! Realm()
let results = realm.objects(User).sorted("id", ascending: true)

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

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

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

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

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

関連記事

この他にもiOSアプリ開発で見つけたネタや悩んだ内容など紹介しています。Tipsをまとめておりますのでこちらのページをご参照ください。