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

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

  • エラーが発生した場合、通知ブロックは 1 回呼び出され、 .errorの結果とエラーに関する詳細を含むNSErrorが呼び出されます。 これは現在、変更セットを計算するためにバックグラウンド スレッドで Realm を開いて失敗した場合にのみ発生します。 コールバックは、.error で呼び出された後、再度呼び出されることはありません。 値。

    宣言

    Swift

    case error(Error)