RealmCollectionchange

@frozen
public enum RealmCollectionChange<CollectionType>

RealmCollectionChangeの値は、Realm 通知によって報告されるコレクションの変更に関する情報をカプセル化します。

変更情報は、各変更タイプの コレクション内の行インデックスの単純な配列と、 UITableViewのバッチ更新メソッドに直接渡すのに適したリクエスト セクション内のインデックス パスの配列の 2 つの形式で利用できます。

.updateの場合のインデックスの配列はUITableViewのバッチ化規則に従い、インデックス パスに変換された後、テーブル ビューのバッチ アップデート関数にそのまま渡すことができます。 たとえば、単純な 1 セクションのテーブル ビューの場合、次の操作を実行できます。

self.notificationToken = results.observe { changes in
    switch changes {
    case .initial:
        // Results are now populated and can be accessed without blocking the UI
        self.tableView.reloadData()
        break
    case .update(_, let deletions, let insertions, let modifications):
        // Query results have changed, so apply them to the TableView
        self.tableView.beginUpdates()
        self.tableView.insertRows(at: insertions.map { IndexPath(row: $0, section: 0) },
           with: .automatic)
        self.tableView.deleteRows(at: deletions.map { IndexPath(row: $0, section: 0) },
           with: .automatic)
        self.tableView.reloadRows(at: modifications.map { IndexPath(row: $0, section: 0) },
           with: .automatic)
        self.tableView.endUpdates()
        break
    case .error(let err):
        // An error occurred while opening the Realm file on the background worker thread
        fatalError("\(err)")
        break
    }
}
  • .initial は、クエリの最初の実行が完了し(該当する場合)、ブロッキング作業を実行せずにコレクションが使用できるようになりましたことを示します。

    宣言

    Swift

    case initial(CollectionType)
  • .update は、コレクション内のどのオブジェクトが変更されたか、コレクション内の 1 つ以上のオブジェクトが変更された書込みトランザクションがコミットされたことを示します。

    変更配列の 3 つすべては常に昇順でソートされます。

    宣言

    Swift

    case update(CollectionType, deletions: [Int], insertions: [Int], modifications: [Int])

    パラメーター

    deletions

    このコレクションから削除された、コレクションの以前のバージョン内のインデックス。

    insertions

    このバージョンで追加された新しいコレクション内のインデックス。

    modifications

    このコレクションの以前のバージョンで変更されたオブジェクトのインデックス。

  • エラーが発生しなくなりました。 このケースは使用されず、次のメジャー バージョンで削除されます。

    宣言

    Swift

    case error(Error)