Objeto

extension Object
extension Object: ObservableObject
extension Object: _RealmCollectionValueInsideOptional
extension Object: ThreadConfined

Inicializadores

  • Cria uma instância não gerenciada de um objeto de Realm.

    O argumento value é utilizado para preencher o objeto. Pode ser um objeto compatível com codificação key-value, uma array ou dicionário retornado dos métodos em NSJSONSerialization ou um Array contendo um elemento para cada propriedade gerenciada. Uma exceção será lançada se alguma propriedade obrigatória não estiver presente e essas propriedades não tiverem sido definidas com valores padrão.

    Ao passar um Array como argumento value , todas as propriedades devem estar presentes, válidas e na mesma ordem que as propriedades definidas no modelo.

    Chame add(_:) em uma instância Realm para adicionar um objeto não gerenciado a esse Realm.

    Declaração

    Swift

    public convenience init(value: Any)

    Parâmetros

    value

    O valor utilizado para preencher o objeto.

Propriedades

  • O Realm que managed o objeto ou nil se o objeto não for gerenciado.

    Declaração

    Swift

    public var realm: Realm? { get }
  • O esquema de objetos que lista as propriedade managed do objeto.

    Declaração

    Swift

    public var objectSchema: ObjectSchema { get }
  • Indica se o objeto não pode mais ser acessado porque agora é inválido.

    Um objeto não poderá mais ser acessado se o objeto tiver sido excluído do Realm que o managed ou se invalidate() for chamado nesse Realm. Esta propriedade é observável por valor-chave.

    Declaração

    Swift

    dynamic open override var isInvalidated: Bool { get }
  • Uma descrição legível por humanos do objeto.

    Declaração

    Swift

    open override var description: String { get }

Personalização de objetos

  • Substitua este método para especificar o nome de uma propriedade a ser usada como chave primária.

    Somente propriedades dos tipos String, Int, ObjectId e UUID podem ser designadas como a chave primária. As propriedades da chave primária impõem exclusividade para cada valor sempre que a propriedade é definida, o que incorre em menor sobrecarga. Os índices são criados automaticamente para propriedades de chave primária.

    Aviso

    Esta função só é aplicável a declarações de propriedade legadas utilizando @objc. Ao usar @Persisted, use @Persisted(primaryKey: true) em vez disso.

    Declaração

    Swift

    @objc
    open class func primaryKey() -> String?

    Valor de retorno

    O nome da propriedade designada como chave primária ou nil se o modelo não tiver chave primária.

  • Substitua este método para especificar os nomes das propriedades a serem ignoradas. Essas propriedade não serão managed pelo Realm que managed o objeto.

    Aviso

    Esta função só é aplicável a declarações de propriedade legadas utilizando @objc. Ao usar @Persisted, quaisquer propriedades não marcadas com @Persisted são automaticamente ignoradas.

    Declaração

    Swift

    @objc
    open class func ignoredProperties() -> [String]

    Valor de retorno

    Uma array de nomes de propriedades a serem ignorados.

  • Retorna uma matriz de nomes de propriedades para propriedades que devem ser indexadas.

    Somente propriedades de string, inteiro, booleano, Date e NSDate são aceitas.

    Aviso

    Esta função só é aplicável a declarações de propriedade legadas utilizando @objc. Ao usar @Persisted, use @Persisted(indexed: true) em vez disso.

    Declaração

    Swift

    @objc
    open class func indexedProperties() -> [String]

    Valor de retorno

    Uma array de nomes de propriedades.

  • Substitua este método para especificar um mapa de nomes de propriedades público-privadas. Isso definirá um nome de propriedade persistente diferente no Realm e permitirá o uso do nome público para qualquer operação com a propriedade. (Ex: query, classificação, ...). Isto é muito útil se você precisar mapear os nomes das propriedades do seu JSON schema Device Sync para os nomes de propriedades locais.

    class Person: Object {
        @Persisted var firstName: String
        @Persisted var birthDate: Date
        @Persisted var age: Int
    
        override class public func propertiesMapping() -> [String : String] {
            ["firstName": "first_name",
             "birthDate": "birth_date"]
        }
    }
    

    Observação

    Somente as propriedades que têm um nome de coluna diferente devem ser adicionadas ao dicionário de mapeamento de propriedades.

    Observação

    Em um bloco de migração, ao enumerar uma propriedade antiga com um nome público/privado, você terá que usar o nome da coluna antigo em vez do público para recuperar o valor da propriedade.
    let migrationBlock = { migration, oldSchemaVersion in
        migration.enumerateObjects(ofType: "Person", { oldObj, newObj in
           let oldPropertyValue = oldObj!["first_name"] as! String
           // Use this value in migration
        })
    }
    

    Isso também deve ser feito ao renomear uma propriedade.

    let migrationBlock = { migration, oldSchemaVersion in
        migration.renameProperty(onType: "Person", from: "first_name", to: "complete_name")
    }
    

    Declaração

    Swift

    open override class func propertiesMapping() -> [String : String]

    Valor de retorno

    Um dicionário de nomes de propriedades público-privadas.

Codificação e assinatura de valor-chave

  • Retorna ou define o valor da propriedade com o nome fornecido.

    Declaração

    Swift

    @objc
    open subscript(key: String) -> Any? { get set }

Notificações

  • Registra um bloco a ser chamado cada vez que o objeto for alterado.

    O bloqueio será chamado de forma assíncrona após cada transação de escrita que exclua o objeto ou modifique qualquer uma das propriedades managed do objeto, incluindo autoatribuições que definem uma propriedade ao seu valor existente.

    Para transações de gravação realizadas em diferentes threads ou em processos diferentes, o bloco será chamado quando o Realm de gerenciamento for (auto)atualizado para uma versão que inclua as alterações, enquanto para transações de gravação local, ele será chamado em algum momento no futuro após o a transação de escrita está confirmada.

    Se nenhum caminho-chave for fornecido, o bloqueio será executado em qualquer inserção, modificação ou exclusão para todas as propriedades de primeiro nível do objeto. As notificações Object são rasas por padrão, qualquer modificação de propriedade aninhada não trigger uma notificação, a menos que o caminho chave para essa propriedade seja especificado. 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 adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    
    // ... where `dog` is a managed Dog object.
    dog.observe(keyPaths: ["adopted"], { changes in
       // ...
    })
    
    • O bloco de notificação acima é acionado para alterações na propriedade adopted , mas não para quaisquer alterações feitas em name.
    • Se o caminho da chave observado for ["siblings"] , qualquer inserção, exclusão ou modificação na lista siblings acionará o bloqueio. Uma alteração em someSibling.name não acionaria o bloqueio (onde someSibling é um elemento contido em siblings )
    • Se o caminho da chave observado fosse ["siblings.name"] , qualquer inserção ou exclusão na lista siblings acionaria o bloqueio. Para objetos contidos na lista siblings , somente modificações em sua propriedade name acionarão o bloqueio.

    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.

    Se nenhuma fila for fornecida, as notificações serão entregues por meio do loop de eventos padrão e, portanto, não poderão ser entregues enquanto o loop de eventos 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.

    Ao contrário de List e Results, não há chamada de resposta "inicial" feita após você adicionar um novo bloco de notificação.

    Somente objeto managed por um Realm podem ser observados dessa forma. 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.

    É seguro capturar uma forte referência ao objeto observado dentro do bloco de chamada de resposta. Não há ciclo de retenção devido ao fato de que a chamada de resposta é retida pelo token retornado e não pelo próprio objeto.

    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<T: RLMObjectBase>(keyPaths: [String]? = nil,
                                          on queue: DispatchQueue? = nil,
                                          _ block: @escaping (ObjectChange<T>) -> 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 com informações sobre as alterações no objeto.

    Valor de retorno

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

  • Registra um bloco a ser chamado cada vez que o objeto for alterado.

    O bloqueio será chamado de forma assíncrona após cada transação de escrita que exclua o objeto ou modifique qualquer uma das propriedades managed do objeto, incluindo autoatribuições que definem uma propriedade ao seu valor existente.

    Para transações de gravação realizadas em diferentes threads ou em processos diferentes, o bloco será chamado quando o Realm de gerenciamento for (auto)atualizado para uma versão que inclua as alterações, enquanto para transações de gravação local, ele será chamado em algum momento no futuro após o a transação de escrita está confirmada.

    Se nenhum caminho-chave for fornecido, o bloqueio será executado em qualquer inserção, modificação ou exclusão para todas as propriedades de primeiro nível do objeto. As notificações Object são rasas por padrão, qualquer modificação de propriedade aninhada não acionará uma notificação, a menos que o caminho chave para essa propriedade seja especificado. 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, eu

    class Dog: Object {
        @Persisted var name: String
        @Persisted var adopted: Bool
        @Persisted var siblings: List<Dog>
    }
    
    // ... where `dog` is a managed Dog object.
    dog.observe(keyPaths: [\Dog.adopted], { changes in
       // ...
    })
    
    • O bloco de notificação acima é acionado para alterações na propriedade adopted , mas não para quaisquer alterações feitas em name.
    • Se o caminho da chave observado for [\Dog.siblings] , qualquer inserção, exclusão ou modificação na lista siblings acionará o bloqueio. Uma alteração em someSibling.name não acionaria o bloqueio (onde someSibling é um elemento contido em siblings )
    • Se o caminho da chave observado fosse [\Dog.siblings.name] , qualquer inserção ou exclusão na lista siblings acionaria o bloqueio. Para objetos contidos na lista siblings , somente modificações em sua propriedade name acionarão o bloqueio.

    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.

    Se nenhuma fila for fornecida, as notificações serão entregues por meio do loop de eventos padrão e, portanto, não poderão ser entregues enquanto o loop de eventos 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.

    Ao contrário de List e Results, não há chamada de resposta "inicial" feita após você adicionar um novo bloco de notificação.

    Somente objeto managed por um Realm podem ser observados dessa forma. 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.

    É seguro capturar uma forte referência ao objeto observado dentro do bloco de chamada de resposta. Não há ciclo de retenção devido ao fato de que a chamada de resposta é retida pelo token retornado e não pelo próprio objeto.

    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<T: ObjectBase>(keyPaths: [PartialKeyPath<T>],
                                       on queue: DispatchQueue? = nil,
                                       _ block: @escaping (ObjectChange<T>) -> 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. 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 com informações sobre as alterações no objeto.

    Valor de retorno

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

  • Registra um bloco a ser chamado cada vez que o objeto for alterado.

    O bloqueio será chamado de forma assíncrona no executor do ator fornecido após cada transação de escrita que exclua o objeto ou modifique qualquer uma das propriedades managed do objeto, incluindo auto-atribuições que definem uma propriedade para seu valor existente. O bloco recebe uma cópia do objeto isolada para o ator solicitado, que pode ser usada com segurança nesse ator junto com informações sobre o que foi alterado.

    Para transações de gravação realizadas em diferentes threads ou em processos diferentes, o bloco será chamado quando o Realm de gerenciamento for (auto)atualizado para uma versão que inclua as alterações, enquanto para transações de gravação local, ele será chamado em algum momento no futuro após o a transação de escrita está confirmada.

    Somente objeto managed por um Realm podem ser observados dessa forma. 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.

    Por padrão, somente alterações diretas nas propriedades do objeto produzirão notificações, e não alterações em objetos vinculados. Observe que isso é diferente das notificações de alteração de coleção. Se uma array de keypath não nula e não vazia for passada, somente as alterações nas propriedades identificadas por esses keypaths produzirão notificações de alteração. Os keypaths podem percorrer as propriedades do link para receber informações sobre alterações em objetos vinculados.

    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

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    @_unsafeInheritExecutor
    public func observe<A: Actor, T: Object>(
        keyPaths: [String]? = nil, on actor: A,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    Parâmetros

    actor

    O ator para o qual isolar as notificações.

    block

    O bloco a ser chamado com informações sobre as alterações no objeto.

    Valor de retorno

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

  • Registra um bloco a ser chamado cada vez que o objeto for alterado.

    O bloqueio será chamado de forma assíncrona no executor do ator fornecido após cada transação de escrita que exclua o objeto ou modifique qualquer uma das propriedades managed do objeto, incluindo auto-atribuições que definem uma propriedade para seu valor existente. O bloco recebe uma cópia do objeto isolada para o ator solicitado, que pode ser usada com segurança nesse ator junto com informações sobre o que foi alterado.

    Para transações de gravação realizadas em diferentes threads ou em processos diferentes, o bloco será chamado quando o Realm de gerenciamento for (auto)atualizado para uma versão que inclua as alterações, enquanto para transações de gravação local, ele será chamado em algum momento no futuro após o a transação de escrita está confirmada.

    Somente objeto managed por um Realm podem ser observados dessa forma. 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.

    Por padrão, somente alterações diretas nas propriedades do objeto produzirão notificações, e não alterações em objetos vinculados. Observe que isso é diferente das notificações de alteração de coleção. Se uma array de keypath não nula e não vazia for passada, somente as alterações nas propriedades identificadas por esses keypaths produzirão notificações de alteração. Os keypaths podem percorrer as propriedades do link para receber informações sobre alterações em objetos vinculados.

    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

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    @_unsafeInheritExecutor
    public func observe<A: Actor, T: Object>(
        keyPaths: [PartialKeyPath<T>], on actor: A,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    Parâmetros

    actor

    O ator para o qual isolar as notificações.

    block

    O bloco a ser chamado com informações sobre as alterações no objeto.

    Valor de retorno

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

Comparação

  • Retorna se dois Objeto de Realm são iguais.

    O objeto são considerados os mesmos se e somente se forem managed pelo mesmo Realm e ponto para o mesmo objeto subjacente no reconhecimento de data center.

    Observação

    A comparação de igualdade é implementada por isEqual(_:) . Se o tipo de objeto for definido com uma chave primária, o isEqual(_:) se comportará de forma idêntica a este método. Se o Tipo de objeto de Realm não for definido com uma chave primária, isEqual(_:) utilizará o comportamento NSObject de comparar a identidade do objeto. Esse método pode ser usado para comparar dois objetos para igualdade de banco de dados, independentemente de seu tipo de objeto definir ou não uma chave primária.

    Declaração

    Swift

    public func isSameObject(as object: Object?) -> Bool

    Parâmetros

    object

    O objeto com o qual comparar o receptor.

  • Indica se este objeto está congelado.

    Veja

    Object.freeze()

    Declaração

    Swift

    public var isFrozen: Bool { get }
  • Retorna um snapshot congelado (imutável) deste objeto.

    A cópia congelada é um objeto imutável que contém os mesmos dados que este objeto contém atualmente, mas não será atualizado quando forem feitas gravações no Realm que a contém. Ao contrário dos objetos ativos, os objetos congelados podem ser acessados de qualquer thread.

    Aviso

    Manter um objeto congelado por um longo período enquanto executa a 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.

    Aviso

    Este método só pode ser chamado em um managed objeto.

    Declaração

    Swift

    public func freeze() -> Self
  • Retorna uma referência ativa (mutável) deste objeto.

    Esse método cria um acessador gerenciado para uma cópia ativa do mesmo objeto congelado. Retornará a si mesmo se for chamado em um objeto já ativo.

    Declaração

    Swift

    public func thaw() -> `Self`?