Resultados

@frozen
public struct Results<Element> : Equatable where Element : RealmCollectionValue
extension Results: RealmSubscribable
extension Results: RealmCollection
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 }
  • O tipo dos objetos descritos pelos resultados.

    Declaração

    Swift

    public typealias ElementType = Element

Propriedades

  • O Realm que gerencia esses resultados. Observe que esta propriedade nunca retornará nil.

    Declaração

    Swift

    public var realm: Realm? { get }
  • Indica se os resultados não são mais válidos.

    Os resultados se tornam inválidos se invalidate() for chamado no realm que o contém. Um resultado invalidado pode ser acessado, mas sempre estará vazio.

    Declaração

    Swift

    public var isInvalidated: Bool { get }
  • O número de objetos nos resultados.

    Declaração

    Swift

    public var count: Int { get }

Recuperação de Índice

  • Retorna o índice do objeto fornecido nos resultados ou nil se o objeto não estiver presente.

    Declaração

    Swift

    public func index(of object: Element) -> Int?
  • Retorna o índice do primeiro objeto que corresponde ao predicado ou nil se nenhum objeto corresponder.

    Declaração

    Swift

    public func index(matching predicate: NSPredicate) -> Int?

    Parâmetros

    predicate

    O predicado com o qual filtrar os objetos.

Recuperação de objetos

  • Retorna o objeto no index fornecido.

    Declaração

    Swift

    public subscript(position: Int) -> Element { get }

    Parâmetros

    index

    O índice.

  • Retorna o primeiro objeto nos resultados ou nil se os resultados estiverem vazios.

    Declaração

    Swift

    public var first: Element? { get }
  • Retorna o último objeto nos resultados ou nil se os resultados estiverem vazios.

    Declaração

    Swift

    public var last: Element? { get }

KVC

  • Retorna um Array contendo os resultados de invocar valueForKey(_:) com key em cada um dos resultados.

    Declaração

    Swift

    public func value(forKey key: String) -> Any?

    Parâmetros

    key

    O nome da propriedade cujos valores são desejados.

  • Retorna um Array contendo os resultados de invocar valueForKeyPath(_:) com keyPath em cada um dos resultados.

    Declaração

    Swift

    public func value(forKeyPath keyPath: String) -> Any?

    Parâmetros

    keyPath

    O caminho da chave para a propriedade cujos valores são desejados.

  • Invoca setValue(_:forKey:) em cada um dos objetos representados pelos resultados utilizando o value e key especificados.

    Aviso

    Este método só pode ser chamado durante uma transação de escrita.

    Declaração

    Swift

    public func setValue(_ value: Any?, forKey key: String)

    Parâmetros

    value

    O valor do objeto.

    key

    O nome da propriedade cujo valor deve ser definido em cada objeto.

Filtragem

  • Retorna um Results contendo todos os objetos que correspondem ao predicado fornecido na coleção.

    Declaração

    Swift

    public func filter(_ predicate: NSPredicate) -> Results<Element>

    Parâmetros

    predicate

    O predicado com o qual filtrar os objetos.

Classificação

  • Retorna um Results contendo os objetos representados pelos resultados, mas classificados.

    Os objetos são classificados com base nos valores do caminho de chave fornecido. Por exemplo, para classificar uma coleção de Student s do mais novo para o mais antigo com base em sua propriedade age , você pode chamar students.sorted(byKeyPath: "age", ascending: true) .

    Aviso

    As collection só podem ser classificadas por propriedade dos tipos booleano, Date, NSDate, ponto flutuante de precisão única e dupla, inteiro e string.

    Declaração

    Swift

    public func sorted(byKeyPath keyPath: String, ascending: Bool = true) -> Results<Element>

    Parâmetros

    keyPath

    O caminho da chave para classificar por.

    ascending

    A direção para classificar.

  • Retorna um Results contendo os objetos representados pelos resultados, mas classificados.

    Aviso

    As collection só podem ser classificadas por propriedade dos tipos booleano, Date, NSDate, ponto flutuante de precisão única e dupla, inteiro e string.

    Declaração

    Swift

    public func sorted<S: Sequence>(by sortDescriptors: S) -> Results<Element>
        where S.Iterator.Element == SortDescriptor

    Parâmetros

    sortDescriptors

    Uma sequência de SortDescriptors para classificar.

  • Retorna um Results contendo objetos distintos com base nos caminhos de chave especificados

    Declaração

    Swift

    public func distinct<S: Sequence>(by keyPaths: S) -> Results<Element>
        where S.Iterator.Element == String

    Parâmetros

    keyPaths

    Os principais caminhos utilizados produzem resultados distintos

Operações agregadas

  • Retorna o valor mínimo (mais baixo) da propriedade fornecida entre todos os resultados, ou nil se os resultados estiverem vazios.

    Aviso

    Somente uma propriedade cujo tipo esteja em conformidade com o protocolo MinMaxType pode ser especificada.

    Declaração

    Swift

    public func min<T>(ofProperty property: String) -> T? where T : MinMaxType

    Parâmetros

    property

    O nome de uma propriedade cujo valor mínimo é desejado.

  • Retorna o valor máximo (mais alto) de determinada propriedade entre todos os resultados, ou nil se os resultados estiverem vazios.

    Aviso

    Somente uma propriedade cujo tipo esteja em conformidade com o protocolo MinMaxType pode ser especificada.

    Declaração

    Swift

    public func max<T>(ofProperty property: String) -> T? where T : MinMaxType

    Parâmetros

    property

    O nome de uma propriedade cujo valor mínimo é desejado.

  • Retorna a soma dos valores de uma determinada propriedade sobre todos os resultados.

    Aviso

    Somente uma propriedade cujo tipo esteja em conformidade com o protocolo AddableType pode ser especificada.

    Declaração

    Swift

    public func sum<T>(ofProperty property: String) -> T where T : AddableType

    Parâmetros

    property

    O nome de uma propriedade cujos valores devem ser somados.

  • Retorna o valor médio de uma determinada propriedade em todos os resultados ou nil se os resultados estiverem vazios.

    Aviso

    Somente o nome de uma propriedade cujo tipo esteja em conformidade com o protocolo AddableType pode ser especificado.

    Declaração

    Swift

    public func average<T>(ofProperty property: String) -> T? where T : AddableType

    Parâmetros

    property

    O nome de uma propriedade cujo valor médio deve ser calculado.

Notificações

  • Registra um bloco a ser chamado cada vez que a collection for alterada.

    O bloco será chamado de forma assíncrona com os resultados iniciais e, em seguida, chamado novamente após cada transação de gravação que altere qualquer um dos objetos da coleção ou quais objetos estão na coleção.

    O parâmetro change que é passado para o bloco reporta, na forma de índices dentro da collection, quais dos objetos foram adicionados, removidos ou modificados durante cada transação de escrita. Consulte a documentação do RealmCollectionChange para obter mais informações sobre as informações de alteração fornecidas e um exemplo de como usá-las para atualizar um UITableView .

    No momento em que o bloqueio for chamado, a coleção será totalmente avaliada e atualizada e, desde que você não execute uma transação de gravação na mesma thread ou chame explicitamente realm.refresh() , acessá-la nunca executará o bloqueio trabalho.

    Se nenhuma fila for fornecida, as notificações serão entregues por meio do loop de execução padrão e, portanto, não poderão ser entregues enquanto o loop de execução estiver bloqueado por outra atividade. Se uma fila for fornecida, as notificações serão entregues para essa fila. Quando as notificações não podem ser entregues instantaneamente, várias notificações podem ser agrupadas em uma única notificação. Isso pode incluir a notificação com a coleção inicial.

    Por exemplo, o código a seguir executa uma transação de escrita imediatamente após adicionar o bloqueio de notificação, para que não haja oportunidade para que a notificação inicial seja entregue primeiro. Como resultado, a notificação inicial refletirá o estado do Realm após a transação de escrita.

    let dogs = realm.objects(Dog.self)
    print("dogs.count: \(dogs?.count)") // => 0
    let token = dogs.observe { changes in
        switch changes {
        case .initial(let dogs):
            // Will print "dogs.count: 1"
            print("dogs.count: \(dogs.count)")
            break
        case .update:
            // Will not be hit in this example
            break
        case .error:
            break
        }
    }
    try! realm.write {
        let dog = Dog()
        dog.name = "Rex"
        person.dogs.append(dog)
    }
    // end of run loop execution context
    

    Você deve reter o token retornado pelo tempo que desejar que as atualizações sejam enviadas ao bloco. Para parar de receber atualizações, ligue para invalidate() no token.

    Aviso

    Este método não pode ser chamado durante uma transação de escrita, ou quando o Realm que o contém for somente leitura.

    Declaração

    Swift

    public func observe(on queue: DispatchQueue? = nil,
                        _ block: @escaping (RealmCollectionChange<Results>) -> Void) -> NotificationToken

    Parâmetros

    queue

    A fila de despacho em série para receber a notificação. Se nil, as notificações são entregues ao thread atual.

    block

    O bloco a ser chamado sempre que ocorre uma alteração.

    Valor de retorno

    Um token que deve ser mantido pelo tempo que você quiser que as atualizações sejam entregues.

Objetos congelados

Resultados

  • 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 }

Suporte a sequências

Suporte a collections

  • A posição do primeiro elemento em uma coleção não vazia. Idêntico ao endIndex em uma coleta vazia.

    Declaração

    Swift

    public var startIndex: Int { get }
  • A posição "além do final" da collection. endIndex não é um argumento válido para subscrito e está sempre acessível a partir de startIndex por zero ou mais aplicações de sucessor ().

    Declaração

    Swift

    public var endIndex: Int { get }
  • Declaração

    Swift

    public func index(after i: Int) -> Int
  • Declaração

    Swift

    public func index(before i: Int) -> Int

Disponível onde Element: Encodable