RealmSectionedResult

public protocol RealmSectionedResult : ThreadConfined, Equatable, RandomAccessCollection

RealmSectionedResult define propriedades e métodos que são comuns entre SectionedResults e ResultSection.

Propriedades

  • O Realm que gerencia a coleção, ou nil se a coleção for invalidada.

    Declaração

    Swift

    var realm: Realm? { get }
  • Indica se a collection não pode mais ser acessada.

    A coleção não poderá mais ser acessada se invalidate() for chamado no Realm que gerencia a coleção.

    Declaração

    Swift

    var isInvalidated: Bool { get }
  • O número de objetos na collection.

    Declaração

    Swift

    var count: Int { get }
  • Retorna verdadeiro se esta collection estiver congelada

    Declaração

    Swift

    var isFrozen: Bool { get }
  • Retorna um snapshot congelado (imutável) desta collection.

    A cópia congelada é uma coleção imutável que contém os mesmos dados que esta coleção contém atualmente, mas não será atualizada quando forem feitas gravações no Realm que a contém. Ao contrário das collections ativas, as collections congeladas podem ser acessadas de qualquer thread.

    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.

    Aviso

    Manter uma collection congelada por um longo período enquanto executa transação de escrita no Realm pode fazer com que o Arquivo de Realm cresça para tamanhos grandes. Consulte Realm.Configuration.maximumNumberOfActiveVersions para obter mais informações.

    Declaração

    Swift

    func freeze() -> Self
  • Retorna uma versão ativa (mutável) dessa collection congelada.

    Esse método resolve uma referência a uma cópia ativa da mesma collection congelada. Se for chamado em uma coleção ativa, retornará a si mesmo.

    Declaração

    Swift

    func thaw() -> Self?
  • observe(keyPaths:on:_:) Implementação padrão

    Registra um bloco a ser chamado sempre que a coleção de resultados seccionada for alterada.

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

    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 SectionedResultsChange 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 outras atividades. Se uma fila for fornecida, as notificações serão entregues nessa 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 de resultados seccionados.

    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)
    let sectionedResults = dogs.sectioned(by: \.age, ascending: true)
    print("sectionedResults.count: \(sectionedResults?.count)") // => 0
    let token = sectionedResults.observe { changes in
        switch changes {
        case .initial(let sectionedResults):
            // Will print "sectionedResults.count: 1"
            print("sectionedResults.count: \(sectionedResults.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
    

    Se nenhum caminho-chave for fornecido, o bloqueio será executado em qualquer inserção, modificação ou exclusão para todas as propriedades do objeto e as propriedades de quaisquer objetos vinculados aninhados. Se um caminho de chave ou caminhos de chave forem fornecidos, o bloco será chamado para alterações que ocorrem apenas nos caminhos de chave fornecidos. Por exemplo, se:

    class Dog: Object {
        @Persisted var name: String
        @Persisted var age: Int
        @Persisted var toys: List<Toy>
    }
    // ...
    let dogs = realm.objects(Dog.self)
    let sectionedResults = dogs.sectioned(by: \.age, ascending: true)
    let token = sectionedResults.observe(keyPaths: ["name"]) { changes in
        switch changes {
        case .initial(let sectionedResults):
           // ...
        case .update:
           // This case is hit:
           // - after the token is initialized
           // - when the name property of an object in the
           // collection is modified
           // - when an element is inserted or removed
           //   from the collection.
           // This block is not triggered:
           // - when a value other than name is modified on
           //   one of the elements.
        case .error:
            // ...
        }
    }
    // end of run loop execution context
    
    • Se o caminho da chave observado fosse ["toys.brand"], qualquer inserção ou exclusão na lista toys em qualquer um dos elementos da collection trigger o bloqueio. Alterações no valor brand em qualquer Toy vinculado a um Dog nessa collection triggerão o bloqueio. Alterações em um valor diferente de brand em qualquer Toy vinculado a um Dog nessa collection não trigger o bloqueio. Qualquer inserção ou remoção na collection de tipos Dog que está sendo observada também trigger uma notificação.
    • Se o exemplo acima observasse o caminho da chave ["toys"], qualquer inserção, exclusão ou modificação na lista toys para qualquer elemento da collection trigger o bloqueio. Alterações em qualquer valor em qualquer Toy que esteja vinculado a um Dog nesta collection não trigger o bloqueio. Qualquer inserção ou remoção na collection de tipos Dog que está sendo observada ainda trigger uma notificação.
    • Qualquer modificação na propriedade de caminho da chave da seção que resulte na mudança de posição do objeto na seção ou na alteração totalmente da seção trigger uma notificação.

    Observação

    Vários tokens de notificação no mesmo objeto que filtram exclusivamente caminhos de chave separados não filtram. Se uma alteração de caminho-chavefor satisfeita para um token de notificação, todos os bloqueios de token de notificação para esse objeto serão executados.

    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.

    Implementação padrão

    Declaração

    Swift

    func observe(keyPaths: [String]?,
                 on queue: DispatchQueue?,
                 _ block: @escaping (SectionedResultsChange<Self>) -> Void) -> NotificationToken

    Parâmetros

    keyPaths

    Somente a propriedade contida na array de caminhos principais vai trigger o bloqueio quando forem modificadas. Se nil, notificações serão entregues para qualquer alteração de propriedade no objeto. Os caminhos da chave de string que não correspondem a uma propriedade válida lançarão uma exceção. Consulte a descrição acima para obter mais detalhes sobre propriedades vinculadas.

    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.

Disponível onde Element: RealmSectionedResult, Element.Element: ObjectBase

  • observe(keyPaths:on:_:) Implementação padrão

    Implementação padrão

    Registra um bloco a ser chamado sempre que a coleção de resultados seccionada for alterada.

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

    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 SectionedResultsChange 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 outras atividades. Se uma fila for fornecida, as notificações serão entregues nessa 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 de resultados seccionados.

    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)
    let sectionedResults = dogs.sectioned(by: \.age, ascending: true)
    print("sectionedResults.count: \(sectionedResults?.count)") // => 0
    let token = sectionedResults.observe { changes in
        switch changes {
        case .initial(let sectionedResults):
            // Will print "sectionedResults.count: 1"
            print("sectionedResults.count: \(sectionedResults.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
    

    Se nenhum caminho-chave for fornecido, o bloqueio será executado em qualquer inserção, modificação ou exclusão para todas as propriedades do objeto e as propriedades de quaisquer objetos vinculados aninhados. Se um caminho de chave ou caminhos de chave forem fornecidos, o bloco será chamado para alterações que ocorrem apenas nos caminhos de chave fornecidos. Por exemplo, se:

    class Dog: Object {
        @Persisted var name: String
        @Persisted var age: Int
        @Persisted var toys: List<Toy>
    }
    // ...
    let dogs = realm.objects(Dog.self)
    let sectionedResults = dogs.sectioned(by: \.age, ascending: true)
    let token = sectionedResults.observe(keyPaths: ["name"]) { changes in
        switch changes {
        case .initial(let sectionedResults):
           // ...
        case .update:
           // This case is hit:
           // - after the token is initialized
           // - when the name property of an object in the
           // collection is modified
           // - when an element is inserted or removed
           //   from the collection.
           // This block is not triggered:
           // - when a value other than name is modified on
           //   one of the elements.
        case .error:
            // ...
        }
    }
    // end of run loop execution context
    
    • Se o caminho da chave observado fosse ["toys.brand"], qualquer inserção ou exclusão na lista toys em qualquer um dos elementos da collection trigger o bloqueio. Alterações no valor brand em qualquer Toy vinculado a um Dog nessa collection triggerão o bloqueio. Alterações em um valor diferente de brand em qualquer Toy vinculado a um Dog nessa collection não trigger o bloqueio. Qualquer inserção ou remoção na collection de tipos Dog que está sendo observada também trigger uma notificação.
    • Se o exemplo acima observasse o caminho da chave ["toys"], qualquer inserção, exclusão ou modificação na lista toys para qualquer elemento da collection trigger o bloqueio. Alterações em qualquer valor em qualquer Toy que esteja vinculado a um Dog nesta collection não trigger o bloqueio. Qualquer inserção ou remoção na collection de tipos Dog que está sendo observada ainda trigger uma notificação.
    • Qualquer modificação na propriedade de caminho da chave da seção que resulte na mudança de posição do objeto na seção ou na alteração totalmente da seção trigger uma notificação.

    Observação

    Vários tokens de notificação no mesmo objeto que filtram exclusivamente caminhos de chave separados não filtram. Se uma alteração de caminho-chavefor satisfeita para um token de notificação, todos os bloqueios de token de notificação para esse objeto serão executados.

    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

    func observe(keyPaths: [PartialKeyPath<Element.Element>],
                 on queue: DispatchQueue? = nil,
                 _ block: @escaping (SectionedResultsChange<Self>) -> Void) -> NotificationToken

    Parâmetros

    keyPaths

    Somente as propriedades contidas na array de caminhos principais trigger o bloqueio quando forem modificadas. Se nil, notificações serão entregues para qualquer alteração de propriedade no objeto.

    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.

Disponível onde Element: ObjectBase

  • observe(keyPaths:on:_:) Implementação padrão

    Implementação padrão

    Registra um bloco a ser chamado sempre que a coleção de resultados seccionada for alterada.

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

    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 SectionedResultsChange 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 outras atividades. Se uma fila for fornecida, as notificações serão entregues nessa 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 de resultados seccionados.

    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)
    let sectionedResults = dogs.sectioned(by: \.age, ascending: true)
    print("sectionedResults.count: \(sectionedResults?.count)") // => 0
    let token = sectionedResults.observe { changes in
        switch changes {
        case .initial(let sectionedResults):
            // Will print "sectionedResults.count: 1"
            print("sectionedResults.count: \(sectionedResults.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
    

    Se nenhum caminho-chave for fornecido, o bloqueio será executado em qualquer inserção, modificação ou exclusão para todas as propriedades do objeto e as propriedades de quaisquer objetos vinculados aninhados. Se um caminho de chave ou caminhos de chave forem fornecidos, o bloco será chamado para alterações que ocorrem apenas nos caminhos de chave fornecidos. Por exemplo, se:

    class Dog: Object {
        @Persisted var name: String
        @Persisted var age: Int
        @Persisted var toys: List<Toy>
    }
    // ...
    let dogs = realm.objects(Dog.self)
    let sectionedResults = dogs.sectioned(by: \.age, ascending: true)
    let token = sectionedResults.observe(keyPaths: ["name"]) { changes in
        switch changes {
        case .initial(let sectionedResults):
           // ...
        case .update:
           // This case is hit:
           // - after the token is initialized
           // - when the name property of an object in the
           // collection is modified
           // - when an element is inserted or removed
           //   from the collection.
           // This block is not triggered:
           // - when a value other than name is modified on
           //   one of the elements.
        case .error:
            // ...
        }
    }
    // end of run loop execution context
    
    • Se o caminho da chave observado fosse ["toys.brand"], qualquer inserção ou exclusão na lista toys em qualquer um dos elementos da collection trigger o bloqueio. Alterações no valor brand em qualquer Toy vinculado a um Dog nessa collection triggerão o bloqueio. Alterações em um valor diferente de brand em qualquer Toy vinculado a um Dog nessa collection não trigger o bloqueio. Qualquer inserção ou remoção na collection de tipos Dog que está sendo observada também trigger uma notificação.
    • Se o exemplo acima observasse o caminho da chave ["toys"], qualquer inserção, exclusão ou modificação na lista toys para qualquer elemento da collection trigger o bloqueio. Alterações em qualquer valor em qualquer Toy que esteja vinculado a um Dog nesta collection não trigger o bloqueio. Qualquer inserção ou remoção na collection de tipos Dog que está sendo observada ainda trigger uma notificação.
    • Qualquer modificação na propriedade de caminho da chave da seção que resulte na mudança de posição do objeto na seção ou na alteração totalmente da seção trigger uma notificação.

    Observação

    Vários tokens de notificação no mesmo objeto que filtram exclusivamente caminhos de chave separados não filtram. Se uma alteração de caminho-chavefor satisfeita para um token de notificação, todos os bloqueios de token de notificação para esse objeto serão executados.

    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

    func observe(keyPaths: [PartialKeyPath<Element>],
                 on queue: DispatchQueue? = nil,
                 _ block: @escaping (SectionedResultsChange<Self>) -> Void) -> NotificationToken

    Parâmetros

    keyPaths

    Somente as propriedades contidas na array de caminhos principais trigger o bloqueio quando forem modificadas. Se nil, notificações serão entregues para qualquer alteração de propriedade no objeto.

    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.