RealmCollectionChange
@frozen
public enum RealmCollectionChange<CollectionType>
A RealmCollectionChange
value encapsulates information about changes to collections
that are reported by Realm notifications.
The change information is available in two formats: a simple array of row
indices in the collection for each type of change, and an array of index paths
in a requested section suitable for passing directly to UITableView
‘s batch
update methods.
The arrays of indices in the .update
case follow UITableView
’s batching
conventions, and can be passed as-is to a table view’s batch update functions after being converted to index paths.
For example, for a simple one-section table view, you can do the following:
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
indicates that the initial run of the query has completed (if applicable), and the collection can now be used without performing any blocking work.Declaration
Swift
case initial(CollectionType)
-
.update
indicates that a write transaction has been committed which either changed which objects are in the collection, and/or modified one or more of the objects in the collection.All three of the change arrays are always sorted in ascending order.
Declaration
Swift
case update(CollectionType, deletions: [Int], insertions: [Int], modifications: [Int])
Parameters
deletions
The indices in the previous version of the collection which were removed from this one.
insertions
The indices in the new collection which were added in this version.
modifications
The indices of the objects in the new collection which were modified in this version.
-
If an error occurs, notification blocks are called one time with a
.error
result and anNSError
containing details about the error. This can only currently happen if opening the Realm on a background thread to calcuate the change set fails. The callback will never be called again after it is invoked with a .error value.Declaration
Swift
case error(Error)