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)