RealmCollectionChange
@frozen
public enum RealmCollectionChange<CollectionType>
Um valor RealmCollectionChange
encapsula informações sobre alterações na collection que são relatadas pelas notificações do Realm.
As informações de alteração estão disponíveis em dois formatos: uma array simples de índices de linha na collection para cada tipo de alteração e uma array de caminhos de índice em uma seção solicitada adequada para passar diretamente para os métodos de atualização em lote do UITableView
.
As arrays de índices no caso .update
seguem as convenções em lote do UITableView
e podem ser passadas como estão para as funções de atualização em lote de uma visualização de tabela após serem convertidas em caminhos de índice. Por exemplo, para uma visualização de tabela de seção simples, você pode fazer o seguinte:
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
indica que a execução inicial da query foi concluída (se aplicável) e a collection agora pode ser usada sem realizar nenhum trabalho de bloqueio.Declaração
Swift
case initial(CollectionType)
-
.update
indica que uma transação de escrita foi confirmada, o que alterou quais objeto estão na collection e/ou modificou um ou mais objeto na collection.Todas as três arrays de alteração são sempre classificadas em ordem crescente.
Declaração
Swift
case update(CollectionType, deletions: [Int], insertions: [Int], modifications: [Int])
Parâmetros
deletions
Os índices da versão anterior da collection que foram removidos desta.
insertions
Os índices da nova collection adicionados nesta versão.
modifications
Os índices do objeto que foram modificados na versão anterior desta collection.
-
Os erros não podem mais ocorrer. Este caso não é usado e será removido na próxima versão principal.
Declaração
Swift
case error(Error)