Resultados
@frozen
public struct Results<Element> : Equatable, RealmCollectionImpl where Element : RealmCollectionValue
extension Results: RealmSubscribable
extension Results: Encodable where Element: Encodable
Results
é um tipo de container de atualização automática no Realm retornado de query de objeto.
Results
pode ser consultada com os mesmos predicados de List<Element>
, e você pode encadear queries para filtrar ainda mais os resultados da query.
Results
sempre refletem o estado atual do Realm na thread atual, inclusive durante transação de escrita na thread atual. A única exceção a isso é ao usar a enumeração for...in
, que sempre enumerará os objetos que corresponderam à query quando a enumeração for iniciada, mesmo que alguns deles sejam excluídos ou modificados para serem excluídos pelo filtro durante a enumeração.
Results
são avaliados preguiçosamente na primeira vez que são acessados; eles só executam query quando o resultado da query é solicitado. Isso significa que o encadeamento de vários Results
temporários para classificar e filtrar seus dados não executa nenhum trabalho desnecessário processando o estado intermediário.
Depois que os resultados são avaliados ou um bloco de notificação é adicionado, os resultados são mantidos atualizados, com o trabalho feito para mantê-los atualizados em um thread em segundo plano, sempre que possível.
As instâncias de resultados não podem ser diretamente instanciadas.
-
Uma descrição legível por humanos dos objetos representados pelos resultados.
Declaração
Swift
public var description: String { get }
-
Retorna o objeto no
index
fornecido.Declaração
Swift
public subscript(position: Int) -> Element { get }
Parâmetros
index
O índice.
-
Declaração
Swift
public static func == (lhs: Results<Element>, rhs: Results<Element>) -> Bool
-
Cria uma SyncSubscription que corresponde à query local dos resultados. Após confirmar a assinatura no conjunto de assinaturas local do domínio, o método aguardará as transferências de acordo com
WaitForSyncMode
.Assinaturas sem nome
Se
.subscribe()
for chamado sem um nome cuja query corresponda a uma assinatura sem nome, outra assinatura não será criada.Se
.subscribe()
for chamado sem um nome cuja query corresponda a uma assinatura nomeada, uma assinatura adicional sem nome será criada.Assinaturas nomeadas
Se
.subscribe()
for chamado com um nome cuja query corresponda a uma assinatura sem nome, uma assinatura nomeada adicional será criada.Nome existente e query
Se
.subscribe()
for chamado com um nome cujo nome é obtido em uma query diferente, a assinatura antiga será atualizada com a nova query.Se
.subscribe()
for chamado com um nome que já esteja em uso por uma query idêntica, nenhuma nova assinatura será criada.Observação
Esse método aguardará que todos os dados sejam baixados antes de retornar quando
WaitForSyncMode.always
e.onCreation
(quando a assinatura for criada pela primeira vez) forem usados. Isso requer uma conexão com a internet se nenhum tempo limite for definido.Observação
Este método abre uma transação de atualização que cria ou atualiza uma assinatura. É aconselhável não repetir este método para criar várias assinaturas. Isso pode criar um gargalo de desempenho ao abrir várias transação de atualização desnecessárias. Para criar várias assinaturas de uma só vez, use
SyncSubscription.update
.Aviso
Essa função só é compatível com thread principal e Realms isolados por atores.
Declaração
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public func subscribe( name: String? = nil, waitForSync: WaitForSyncMode = .onCreation, timeout: TimeInterval? = nil, _isolation: isolated any Actor = #isolation ) async throws -> Results<Element>
Parâmetros
name
O nome aplicado à assinatura
waitForSync
WaitForSyncMode
Determina o comportamento de download para a assinatura. Padrão é.onCreation
.timeout
Um tempo limite opcional do cliente. O cliente cancelará a espera pelos downloads da assinatura após esse tempo. Atingir esse tempo limite não implica um erro no servidor.
Valor de retorno
Retorna
self
. -
Remove uma SyncSubscription que corresponde ao filtro local dos resultados.
O método retorna após confirmar a remoção de assinatura no conjunto de assinatura local do domínio. Chamar esse método não esperará que o objeto seja removido do Realm.
Para que uma assinatura nomeada seja removida, os Resultados devem ter criado a assinatura anteriormente. Por exemplo:
let results1 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(name: "adults") let results2 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(name: "overOne") let results3 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe() // This will unsubscribe from the subscription named "overOne". The "adults" and unnamed // subscription still remain. results2.unsubscribe()
Observação
Este método abre uma transação de atualização que remove uma assinatura. É aconselhável não usar esse método para fazer várias alterações de assinatura em lote no servidor. Para cancelar a assinatura de várias assinaturas de uma só vez, use
SyncSubscription.update
.Aviso
Chamar de cancelamento de assinatura em um resultado não remove o filtro local do
Results
. Depois de chamar o cancelamento de assinatura, os resultados ainda podem conter objetos porque outras assinaturas podem existir no conjunto de assinaturas do domínio.Aviso
Esta API está atualmente em
Preview
e pode estar sujeita a alterações futuras.Declaração
Swift
public func unsubscribe()
-
Uma editora que emite um vazio toda vez que a collection muda.
Apesar do nome, isso na verdade é emitido após a mudança da collection.
Declaração
Swift
public var objectWillChange: RealmPublishers.WillChange<Results> { get }