Domínio

@frozen
public struct Realm
extension Realm: Equatable

Uma instância Realm (também conhecida como "um Realm") representa um reconhecimento de data center Realm.

Os domínios podem ser armazenados no disco (consulte init(path:)) ou na memória (consulte Configuration).

Realm as instâncias são armazenadas em cache internamente e a construção de objetos Realm equivalentes (por exemplo, usando o mesmo caminho ou identificador) produz uma sobrecarga limitada.

Se você quiser especificamente garantir que uma instância Realm seja destruída (por exemplo, se você deseja abrir um Realm, verificar algumas propriedades e, em seguida, possivelmente excluir o arquivo Realm e reabri-lo), coloque o código que usa o Realm dentro de um autoreleasepool {} e certifique-se de que você não tenha outras referências fortes para ele.

Aviso

As instâncias RLMRealm não congeladas são confinadas por threads e não podem ser compartilhadas entre threads ou filas de despacho. Tentar fazer isso fará com que uma exceção seja lançada. Você deve obter uma instância de RLMRealm em cada thread ou fila em que deseja interagir com o Realm. Os domínios podem ser confinados a uma fila de despacho em vez do thread em que são abertos, passando explicitamente na fila ao obter a instância RLMRealm . Se isso não for feito, tentar usar a mesma instância em vários blocos despachados para a mesma fila pode falhar, pois as filas nem sempre são executadas no mesmo thread.

Propriedades

Inicializadores

  • Obtém uma instância do Realm padrão.

    O Realm padrão é mantido como default.realm no diretório documento da sua aplicação no iOS e no diretório de suporte da aplicação do seu aplicativo no OS X.

    O Realm padrão é criado usando o Configuration padrão, que pode ser alterado definindo a propriedade Realm.Configuration.defaultConfiguration para um novo valor.

    Lança

    Um NSError se o Realm não puder ser inicializado.

    Declaração

    Swift

    public init(queue: DispatchQueue? = nil) throws

    Parâmetros

    queue

    Uma fila de despacho opcional à qual confinar o Realm. Se fornecida, essa Instância de Realm pode ser usada de dentro dos blocos despachados para a fila fornecida em vez de na thread atual.

  • Obtém uma instância Realm com a configuração fornecida.

    Lança

    Um NSError se o Realm não puder ser inicializado.

    Declaração

    Swift

    public init(configuration: Configuration, queue: DispatchQueue? = nil) throws

    Parâmetros

    configuration

    Um valor de configuração para utilizar ao criar o Realm.

    queue

    Uma fila de despacho opcional à qual confinar o Realm. Se fornecida, essa Instância de Realm pode ser usada de dentro dos blocos despachados para a fila fornecida em vez de na thread atual.

  • Obtém uma instância do Realm persistente em um URL de arquivo especificado.

    Lança

    Um NSError se o Realm não puder ser inicializado.

    Declaração

    Swift

    public init(fileURL: URL) throws

    Parâmetros

    fileURL

    A URL local do arquivo em que o Realm deve ser salvo.

Async

  • Abra de forma assíncrona um Realm e entregue-o a um bloco na fila fornecida.

    A abertura de um Realm de forma assíncrona executará todo o trabalho necessário para colocar o Realm em um estado utilizável (como a execução de migrações potencialmente demoradas) em um thread em segundo plano antes de ser enviado para a fila fornecida. Além disso, os Realms sincronizados aguardam que todo o conteúdo remoto disponível no momento em que a operação começou seja baixado e esteja disponível localmente.

    O realm passado para a função da chamada de resposta está confinado à fila da chamada de resposta como se Realm(configuration:queue:) fosse usado.

    Declaração

    Swift

    @discardableResult
    public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration,
                                 callbackQueue: DispatchQueue = .main,
                                 callback: @escaping (Result<Realm, Swift.Error>) -> Void) -> AsyncOpenTask

    Parâmetros

    configuration

    Um objeto de configuração para usar ao abrir o Realm.

    callbackQueue

    A fila de despacho na qual a chamada de resposta deve ser executada.

    callback

    Um bloco de chamada de resposta. Se o Realm foi aberto com sucesso, ele será passado como um argumento. Caso contrário, um Swift.Error descrevendo o que deu errado será passado para o bloco.

    Valor de retorno

    Um objeto de tarefa que pode ser usado para observar ou cancelar a abertura assíncrona.

  • Um objeto de tarefa que pode ser usado para observar ou cancelar uma abertura assíncrona.

    Quando um Realm sincronizado é aberto de forma assíncrona, o estado mais recente do Realm é baixado do servidor antes que o retorno de chamada de conclusão seja invocado. Este objeto de tarefa pode ser usado para observar o estado do download ou cancelá-lo. Isso deve ser usado em vez de tentar observar o download por meio da sessão de sincronização, pois a própria sessão de sincronização é criada de forma assíncrona e pode ainda não existir quando Realm.asyncOpen() retornar.

    Veja mais

    Declaração

    Swift

    @frozen
    public struct AsyncOpenTask

Transações

  • Executa ação contidas dentro do bloco fornecido dentro de uma transação de escrita.

    Se o bloqueio gerar um erro, a transação será cancelada e todas as alterações feitas antes do erro serão revertidas.

    Somente uma transação de escrita pode ser aberta por vez para cada Arquivo de Realm. As transações de escrita não podem ser aninhadas, e tentar iniciar uma transação de escrita em um Realm que já esteja em uma transação de escrita lançará uma exceção. As chamadas para write de instâncias Realm para o mesmo Arquivo de Realm em outras threads ou outros processos serão bloqueadas até que a transação de escrita atual seja concluída ou cancelada.

    Antes de iniciar a transação de escrita, o write atualiza a instância do Realm para a Versão do Realm, como se o refresh() tivesse sido chamado e gera notificações, se aplicável. Isso não tem efeito se o Realm já estiver atualizado.

    Você pode ignorar a notificação de blocos de notificações específicos sobre as alterações feitas nessa transação de escrita passando seus tokens de notificação associados. Isso é útil principalmente quando a transação de escrita está salvando as alterações já feitas na interface do usuário e você não deseja que o bloqueio de notificação tente reaplicar as mesmas alterações.

    Os tokens passados para essa função devem ser para notificações desse Realm que foram adicionados na mesma thread em que a transação de escrita está sendo executada. As notificações de threads diferentes não podem ser ignoradas usando esse método.

    Aviso

    Esta função não é segura para chamar de funções assíncronas, que devem utilizar asyncWrite em vez disso.

    Lança

    Um NSError se a transação não puder ser concluída com sucesso. Se block lançar, a função lançará o ErrorType propagado.

    Declaração

    Swift

    @discardableResult
    public func write<Result>(withoutNotifying tokens: [NotificationToken] = [], _ block: (() throws -> Result)) throws -> Result

    Parâmetros

    tokens

    Uma array de tokens de notificação que foram retornados após a adição de chamadas de resposta que você não deseja que sejam notificadas sobre as alterações feitas nessa transação de escrita.

    block

    O bloco contendo ação a serem executadas.

    Valor de retorno

    O valor retornado do bloco, se houver.

  • Inicia uma transação de escrita no Realm.

    Somente uma transação de escrita pode ser aberta por vez para cada Arquivo de Realm. As transações de escrita não podem ser aninhadas, e tentar iniciar uma transação de escrita em um Realm que já esteja em uma transação de escrita lançará uma exceção. As chamadas para beginWrite de instâncias Realm para o mesmo Arquivo de Realm em outras threads ou outros processos serão bloqueadas até que a transação de escrita atual seja concluída ou cancelada.

    Antes de iniciar a transação de escrita, o beginWrite atualiza a instância do Realm para a Versão do Realm, como se o refresh() tivesse sido chamado e gera notificações, se aplicável. Isso não tem efeito se o Realm já estiver atualizado.

    Raramente é uma boa ideia que as transação de escrita abrangem vários ciclos do loop de eventos, mas se você desejar fazer isso, precisará garantir que o Realm que participa da transação de escrita seja mantido ativo até que a transação de escrita seja confirmada.

    Aviso

    Esta função não é segura para chamar de funções assíncronas, que devem utilizar asyncWrite em vez disso.

    Declaração

    Swift

    public func beginWrite()
  • Confirma todas as operações de gravação na transação de escrita atual e termina a transação.

    Após salvar as alterações e concluir a transação de escrita, todos os blocos de notificação registrados nessa instância Realm específica são chamados de forma síncrona. Os blocos de notificação para instâncias Realm em outras threads e blocos registrados para qualquer collection de Realm (incluindo aqueles na thread atual) estão programados para serem chamados de forma síncrona.

    Você pode ignorar a notificação de blocos de notificações específicos sobre as alterações feitas nessa transação de escrita passando seus tokens de notificação associados. Isso é útil principalmente quando a transação de escrita está salvando as alterações já feitas na interface do usuário e você não deseja que o bloqueio de notificação tente reaplicar as mesmas alterações.

    Os tokens passados para essa função devem ser para notificações desse Realm que foram adicionados na mesma thread em que a transação de escrita está sendo executada. As notificações de threads diferentes não podem ser ignoradas usando esse método.

    Aviso

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

    Lança

    Um NSError se a transação não puder ser gravada devido à falta de espaço em disco ou a outros erros de E/S.

    Declaração

    Swift

    public func commitWrite(withoutNotifying tokens: [NotificationToken] = []) throws

    Parâmetros

    tokens

    Uma array de tokens de notificação que foram retornados após a adição de chamadas de resposta que você não deseja que sejam notificadas sobre as alterações feitas nessa transação de escrita.

  • Reverte todas as gravações feitas na transação de escrita atual e encerra a transação.

    Isso reverte todos os objetos no Realm para o estado em que estavam no início da transação de escrita e, em seguida, encerra a transação.

    Isso restaura os dados dos objetos excluídos, mas não revigora as instâncias de objetos invalidados. Quaisquer Objects que foram adicionados ao Realm serão invalidados em vez de se tornarem não gerenciados.

    Dado o seguinte código:

    let oldObject = objects(ObjectType).first!
    let newObject = ObjectType()
    
    realm.beginWrite()
    realm.add(newObject)
    realm.delete(oldObject)
    realm.cancelWrite()
    

    Tanto oldObject quanto newObject retornarão true para isInvalidated, mas a reexecução da query que forneceu oldObject retornará novamente o objeto válido.

    Os observadores da KVO em qualquer objeto que foram modificados durante a transação serão notificados sobre a alteração de volta aos seus valores iniciais, mas nenhuma outra notificação será produzida por uma transação de escrita cancelada.

    Esta função é aplicável independentemente de como uma transação de escrita foi iniciada. Em especial, pode ser chamado de dentro de um bloco passado para write ou writeAsync.

    Aviso

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

    Declaração

    Swift

    public func cancelWrite()
  • Indica se o Realm está atualmente em uma transação de escrita.

    Aviso

    Não basta verificar esta propriedade e, em seguida, iniciar uma transação de escrita sempre que um objeto precisar ser criado, atualizado ou removido. Isso pode fazer com que um grande número de transação de escrita seja criada, degradando o desempenho. Em vez disso, prefira sempre realizar várias atualizações durante uma única transação.

    Declaração

    Swift

    public var isInWriteTransaction: Bool { get }

transação assíncronas

  • Executa de forma assíncrona ação contidas no bloco fornecido dentro de uma transação de escrita. A transação de escrita é iniciada de forma assíncrona como se estivesse chamando beginAsyncWrite e, por padrão, a transação é confirmada de forma assíncrona após a conclusão do bloco. Você também pode chamar explicitamente commitWrite ou cancelWrite de dentro do bloco para confirmar ou cancelar de forma síncrona a transação de escrita. Retornar sem uma dessas chamadas é equivalente a chamar commitWrite.

    @param block O bloco contendo ação a serem executadas.

    @param completedBlock Um bloco que será chamado na thread ou fila de origem assim que o commit for concluído ou falhar com um erro.

    @return Um ID que identifica a transação assíncrona que pode ser passada para cancelAsyncWrite antes de o bloco ser chamado para cancelar a invocação pendente do bloco.

    Declaração

    Swift

    @discardableResult
    public func writeAsync(_ block: @escaping () -> Void, onComplete: ((Swift.Error?) -> Void)? = nil) -> AsyncTransactionId
  • Inicia uma transação de escrita assíncrona. Essa função inicia de forma assíncrona uma transação de escrita em um thread em segundo plano e, em seguida, invoca o bloqueio na thread ou fila original assim que a transação começa. Ao contrário de beginWrite, isso não bloqueará o thread de chamada se outro thread estiver atual dentro de uma transação de escrita e sempre retornará imediatamente. Várias chamadas para esta função (ou para as outras funções que executam transação de escrita assíncrona) enfileirarão os blocos a serem chamados na mesma ordem em que foram enfileirados. Isso inclui chamadas de dentro de um bloco de transação de escrita que, ao contrário da transação síncrona, são permitidas.

    @param asyncWriteBlock O bloco contendo ação a serem executadas dentro da transação de escrita. asyncWriteBlock deve terminar chamando commitAsyncWrite ou commitWrite. Retornar sem uma dessas chamadas é equivalente a chamar cancelAsyncWrite.

    @return Um ID que identifica a transação assíncrona que pode ser passada para cancelAsyncWrite antes de o bloco ser chamado para cancelar a invocação pendente do bloco.

    Declaração

    Swift

    @discardableResult
    public func beginAsyncWrite(_ asyncWriteBlock: @escaping () -> Void) -> AsyncTransactionId
  • Confirma de forma assíncrona uma transação de escrita. A chamada retorna imediatamente, permitindo que o chamador continue enquanto a E/S é realizada em um thread dedicado em segundo plano. Isso pode ser usado independentemente de a transação de escrita ter sido iniciada com beginWrite ou beginAsyncWrite.

    @param onComplete Um bloco que será chamado no thread ou fila de origem assim que o commit for concluído ou falhar com um erro.

    @param allowGrouping Se true, várias chamadas sequenciais para commitAsyncWrite podem ser agrupadas em lote e persistidas para armazenamento estável em um grupo. Isso melhora o desempenho de gravação, especialmente quando a transação individuais lote são pequenas. No evento de uma falha de energia, todas as transação agrupadas serão perdidas ou nenhuma será, em vez da garantia usual de que os dados foram mantidos assim que uma chamada para commit for retornada.

    @return Um ID que identifica o commit da transação assíncrona pode ser passado para cancelAsyncWrite antes do bloco de conclusão ser chamado para cancelar a invocação pendente do bloco. Observe que isso não cancela a confirmação em si.

    Declaração

    Swift

    @discardableResult
    public func commitAsyncWrite(allowGrouping: Bool = false, _ onComplete: ((Swift.Error?) -> Void)? = nil) -> AsyncTransactionId
  • Cancela um bloco em fila para uma transação assíncrona. Isso pode cancelar um bloco passado para um início assíncrono ou uma confirmação assíncrona. O cancelamento de um início cancela totalmente a transação, enquanto o cancelamento de um commit apenas cancela a invocação da chamada de resposta de conclusão, e o commit ainda ocorrerá. A transação só pode ser cancelada antes que o bloco seja invocado, e chamar cancelAsyncWrite de dentro do bloco é um no-op.

    @param AsyncTransactionId Uma ID de transação de beginAsyncWrite ou commitAsyncWrite .

    Declaração

    Swift

    public func cancelAsyncWrite(_ asyncTransactionId: AsyncTransactionId) throws
  • Indica se o Realm está executando operações de gravação assíncrona no momento. Isso se torna true após uma chamada para beginAsyncWrite, commitAsyncWrite ou writeAsync, e permanece assim até que todo o trabalho de gravação assíncrona agendado seja concluído.

    Aviso

    Se isso for true, fechar ou invalidar o Realm bloqueará até que o trabalho agendado seja concluído.

    Declaração

    Swift

    public var isPerformingAsynchronousWriteOperations: Bool { get }

Adicionando e criando objetos

  • O que fazer quando um objeto adicionado ou criado em um Realm tiver uma chave primária que já existe.

    Veja mais

    Declaração

    Swift

    @frozen
    public enum UpdatePolicy : Int
  • Adiciona um objeto não gerenciado a este Realm.

    Se um objeto com a mesma chave primária já existir neste Realm, ele será atualizado com os valores de propriedade deste objeto conforme especificado pelo UpdatePolicy selecionado. A política de atualização deve ser .error para objetos sem chave primária.

    Adicionar um objeto a um Realm também adicionará todos os relacionamentos filhos referenciados por esse objeto (por meio das propriedades Object e List<Object> ). Esses objetos também devem ser objetos válidos para adicionar a esse Realm, e o valor do parâmetro update: é propagado para esses adicionais.

    O objeto a ser adicionado deve ser um objeto não managed ou um objeto válido que já seja managed por este Realm. Adicionar um objeto já gerenciado por este Realm é um no-op, enquanto adicionar um objeto que é gerenciado por outro Realm ou que foi excluído de qualquer Realm (ou seja, um onde isInvalidated é true) é um erro.

    Para copiar um managed objeto de um Realm para outro, use create() em vez disso.

    Aviso

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

    Declaração

    Swift

    public func add(_ object: Object, update: UpdatePolicy = .error)

    Parâmetros

    object

    O objeto a ser adicionado a este Realm.

    update

    O que fazer se já existir um objeto com a mesma chave primária. Deve ser .error para objetos sem uma chave primária.

  • Adiciona todos os objeto de uma collection ao Realm.

    Aviso

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

    Declaração

    Swift

    public func add<S>(_ objects: S, update: UpdatePolicy = .error) where S : Sequence, S.Element : RealmSwiftObject

    Parâmetros

    objects

    Uma sequência que contém objetos a serem adicionados ao Realm.

    update

    Como lidar com objetos na collection com uma chave primária que já existe neste Realm. Deve ser .error para Tipo de objeto de Realm sem uma chave primária.

    update

    Como lidar com objetos na collection com uma chave primária que já existe neste Realm. Deve ser .error para Tipo de objeto de Realm sem uma chave primária.

  • Cria um Objeto de Realm com um determinado valor, adicionando-o ao Realm e retornando-o.

    O argumento value pode ser um Objeto de Realm, um objeto compatível com codificação de valor-chave, uma array ou dicionário retornado dos métodos em NSJSONSerialization ou um Array contendo um elemento para cada propriedade managed. Não passe em uma instância LinkingObjects, por si só ou como membro de uma collection. Se o argumento value for uma array, todas as propriedades deverão estar presentes, válidas e na mesma ordem que as propriedades definidas no modelo.

    Se o tipo de objeto não tiver uma chave primária ou não existir nenhum objeto com a chave primária especificada, um novo objeto será criado no Realm. Se um objeto já existir no Realm com a chave primária especificada e a política de atualização for .modified ou .all, o objeto existente será atualizado e uma referência a esse objeto será retornada.

    Se o objeto estiver sendo atualizado, todas as propriedades definidas em seu esquema serão definidas copiando do value usando codificação de valor-chave. Se o argumento value não responder a value(forKey:) para um determinado nome de propriedade (ou nome de getter, se definido), esse valor permanecerá intocado. As propriedades anuláveis no objeto podem ser definidas como nulo usando NSNull como o valor atualizado ou (se você estiver passando em uma instância de uma subclasse Object ) definindo a propriedade correspondente em value como nulo.

    Aviso

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

    Declaração

    Swift

    @discardableResult
    public func create<T>(_ type: T.Type, value: Any = [String: Any](), update: UpdatePolicy = .error) -> T where T : RealmSwiftObject

    Parâmetros

    type

    O tipo do objeto a ser criado.

    value

    O valor utilizado para preencher o objeto.

    update

    O que fazer se já existir um objeto com a mesma chave primária. Deve ser .error para Tipo de objeto de Realm sem uma chave primária.

    Valor de retorno

    O objeto recém-criado.

Excluindo objetos

  • Exclui um objeto do Realm. Depois que o objeto é excluído, ele é considerado invalidado.

    Aviso

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

    Declaração

    Swift

    public func delete(_ object: ObjectBase)

    Parâmetros

    object

    O objeto a ser excluído.

  • Exclui zero ou mais objetos do Realm.

    Não passe uma fatia para um Results ou para qualquer outro tipo de collection de Realm de atualização automática (por exemplo, o tipo retornado pelo método da biblioteca padrão Swift suffix(_:) ). Em vez disso, faça uma cópia dos objetos a serem excluídos usando Array() e passe isso. Passar diretamente uma visualização para uma collection de atualização automática pode resultar na geração de exceções de "índice fora dos limites".

    Aviso

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

    Declaração

    Swift

    public func delete<S>(_ objects: S) where S : Sequence, S.Element : RLMObjectBase

    Parâmetros

    objects

    Os objetos a serem excluídos. Pode ser um List<Object>, Results<Object> ou qualquer outro Swift Sequence cujos elementos sejam Objects (sujeito às ressalvas acima).

  • Exclui todos os objetos do Realm.

    Aviso

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

    Declaração

    Swift

    public func deleteAll()

Recuperação de objetos

  • Retorna todos os objetos do tipo fornecido armazenados no Realm.

    Declaração

    Swift

    public func objects<Element>(_ type: Element.Type) -> Results<Element> where Element : RealmFetchable

    Parâmetros

    type

    O tipo dos objetos a serem retornados.

    Valor de retorno

    Um Results contendo os objetos.

  • Recupera a instância única de um determinado Tipo de objeto de Realm com a chave primária fornecida do Realm.

    Este método requer que primaryKey() seja substituído na classe de objeto fornecida.

    Declaração

    Swift

    public func object<Element, KeyType>(ofType type: Element.Type, forPrimaryKey key: KeyType) -> Element? where Element : RealmSwiftObject

    Parâmetros

    type

    O tipo do objeto a ser retornado.

    key

    A chave primária do objeto desejado.

    Valor de retorno

    Um objeto do tipo type ou nil se não existir nenhuma instância com a chave primária fornecida.

Notificações

  • Adiciona um manipulador de notificações para alterações feitas nesse Realm e retorna um token de notificação.

    Os manipuladores de notificações são chamados após cada transação de escrita ser confirmada, independentemente do thread ou processo.

    Os blocos manipuladores são chamados no mesmo thread em que foram adicionados e só podem ser adicionados em threads que estejam atualmente dentro de um loop de eventos. A menos que você esteja criando e executando especificamente um loop de eventos em um thread em segundo plano, esse normalmente será apenas o thread principal.

    As notificações não podem ser entregues enquanto o loop de eventos estiver bloqueado por outra atividade. Quando as notificações não podem ser entregues instantaneamente, várias notificações podem ser agrupadas.

    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.

    Declaração

    Swift

    public func observe(_ block: @escaping NotificationBlock) -> NotificationToken

    Parâmetros

    block

    Um bloco chamado para processar as notificações do Realm. Ela recebe os seguintes parâmetros: notification: a notificação recebida; realm: o Realm para o qual ocorreu a notificação.

    Valor de retorno

    Um token que deve ser mantido enquanto você desejar continuar recebendo notificações de alteração.

Atualização automática e atualização

  • Defina esta propriedade como true para atualizar automaticamente este Realm quando as alterações acontecerem em outros segmentos.

    Se definido como true (o padrão), as alterações feitas em outras threads serão refletidas nesse Realm no próximo ciclo do loop de eventos após as alterações serem confirmadas. Se definido como false, você deverá chamar manualmente refresh() no Realm para atualizá-lo e obter os dados mais recentes.

    Observe que, por padrão, os threads em segundo plano não têm um loop de eventos ativo e você precisará chamar manualmente refresh() para atualizar para a versão mais recente, mesmo que autorefresh esteja definido como true.

    Mesmo com esta propriedade habilitada, você ainda pode chamar o refresh() a qualquer momento para atualizar o Realm antes que a atualização automática ocorra.

    As notificações são enviadas quando uma transação de escrita é confirmada se a atualização automática está habilitada ou não.

    Desativar autorefresh em um Realm sem referências fortes a ele não terá nenhum efeito, e autorefresh será revertido para true na próxima vez que o Realm for criado. Normalmente, isso é irrelevante, pois significa que não há nada para atualizar (já que Objects, Lists managed e Results têm referências fortes para o Realm que os managed), mas significa que a configuração autorefresh = false em application(_:didFinishLaunchingWithOptions:) e somente mais tarde o armazenamento de objeto de Realm não funcionará.

    Padrão é true.

    Declaração

    Swift

    public var autorefresh: Bool { get nonmutating set }
  • Atualiza o Realm e os objeto pendentes managed pelo Realm para ponto para os dados mais recentes e fornecer quaisquer notificações aplicáveis.

    Por padrão, os Realms serão atualizados automaticamente de uma maneira mais eficiente do que é possível com essa função. Essa função deve ser evitada quando possível.

    Aviso

    Esta função não é segura para chamar de funções assíncronas, que devem utilizar asyncRefresh em vez disso.

    Declaração

    Swift

    @discardableResult
    public func refresh() -> Bool

    Valor de retorno

    Se houve atualizações para o Realm. Observe que true pode ser retornado mesmo que nenhum dado seja realmente alterado.

Realms congelados

  • Retorna se este Realm estiver congelado.

    Declaração

    Swift

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

    Um Realm congelado é uma visualização de snapshot imutável de uma versão específica dos dados de um Realm. Ao contrário das Instância de Realm, ele não é atualizado ao vivo para refletir as gravações feitas no Realm e pode ser acessado a partir de qualquer thread. Não é permitido gravar em um Realm congelado, e tentar iniciar uma transação de escrita lançará uma exceção.

    Todos os objeto e collection lidos de um Realm congelado também serão congelados.

    Aviso

    Manter um Realm 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.

    Declaração

    Swift

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

    Todos os objeto e collection lidos da referência do Realm retornada não serão mais congelados. Retornará a si mesmo se for chamado em um Realm que ainda não esteja congelado.

    Declaração

    Swift

    public func thaw() -> Realm
  • Retorna um snapshot congelado (imutável) do objeto fornecido.

    A cópia congelada é um objeto imutável que contém os mesmos dados que o objeto fornecido 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.

    Declaração

    Swift

    public func freeze<T>(_ obj: T) -> T where T : RLMObjectBase
  • 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<T>(_ obj: T) -> T? where T : RLMObjectBase
  • Retorna um snapshot congelado (imutável) da collection fornecida.

    A cópia congelada é uma collection imutável que contém os mesmos dados que a collection fornecida atualmente, mas não será atualizada quando forem feitas gravações no Realm que a contém. Ao contrário da collection ativa, a collection congelada pode ser acessada de qualquer thread.

    Aviso

    Este método não pode ser chamado durante uma transação de gravação ou quando o Realm 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

    public func freeze<Collection>(_ collection: Collection) -> Collection where Collection : RealmCollection

Invalidação

  • Invalida todos os Objects, Results, LinkingObjects e Lists managed pelo Realm.

    Um Realm mantém um bloqueio de leitura na versão dos dados acessados por ele, de modo que as alterações feitas no Realm em diferentes threads não modifiquem ou excluam os dados vistos por este Realm. A chamada desse método libera o bloqueio de leitura, permitindo que o espaço usado no disco seja reutilizado por transação de escrita posterior, em vez de aumentar o arquivo. Esse método deve ser chamado antes de executar operações de bloqueio longas em um thread em segundo plano no qual você leu anteriormente dados do Realm que não são mais necessários.

    Todas as instâncias Object, Results e List obtidas desta instância Realm na thread atual são invalidadas. Objects e Arrays não podem ser usados. Results ficará vazio. O próprio Realm permanece válido e uma nova transação de leitura é implicitamente iniciada na próxima vez que os dados forem lidos do Realm.

    Chamar esse método várias vezes seguidas sem ler nenhum dado do Realm, ou antes de ler qualquer dado do Realm, é um modo autônomo.

    Declaração

    Swift

    public func invalidate()

Gerenciamento de arquivos

  • Grava uma cópia compactada e opcionalmente criptografada do Realm na URL local fornecida.

    O arquivo de destino já não pode existir.

    Observe que, se esse método for chamado de dentro de uma transação de gravação, os dados atuais serão gravados, não os dados do ponto em que a transação de escrita anterior foi confirmada.

    Lança

    Um NSError se a cópia não puder ser escrita.

    Declaração

    Swift

    public func writeCopy(toFile fileURL: URL, encryptionKey: Data? = nil) throws

    Parâmetros

    fileURL

    URL local na qual salvar o Realm.

    encryptionKey

    Chave de criptografia opcional de 64 bytes para criptografar o novo arquivo.

  • Grava uma cópia do Realm em um determinado local especificado por uma determinada configuração.

    Se a configuração fornecida for derivada de um User , este Realm será copiado com a funcionalidade de sincronização habilitada.

    O arquivo de destino já não pode existir.

    Lança

    Um NSError se a cópia não puder ser escrita.

    Declaração

    Swift

    public func writeCopy(configuration: Realm.Configuration) throws

    Parâmetros

    configuration

    Uma configuração de Realm.

  • Verifica se o arquivo de Realm para a configuração fornecida existe localmente no disco.

    Para Realms não sincronizados e não na memória, isso é equivalente a FileManager.default.fileExists(atPath:). Para Realms sincronizados, ele se encarrega de calcular o caminho real no disco com base no servidor, no caminho virtual e no usuário, como é feito ao abrir o Realm.

    @param config Uma configuração do Realm para verificar a existência. @return true se o Arquivo de Realm para a configuração fornecida existir no disco, false caso contrário.

    Declaração

    Swift

    public static func fileExists(for config: Configuration) -> Bool
  • Exclui o Arquivo de Realm local e os arquivos temporários associados à configuração fornecida.

    Isso exclui os arquivos ".realm", ".note" e ".management" que seriam criados ao abrir o Realm com a configuração fornecida. Ele não exclui o arquivo de bloqueio (que não contém dados persistentes e é recriado do zero toda vez que o Arquivo de Realm é aberto).

    O Realm não deve estar atualmente aberto em nenhum thread ou em outro processo. Se estiver, isso gerará o erro .alreadyOpen. A tentativa de abrir o Realm em outro thread enquanto a exclusão está ocorrendo bloqueará e, em seguida, criará um novo Realm e o abrirá posteriormente.

    Se o Realm ainda não existir, isso retornará false.

    @param config Uma configuração de Realm que identifica o Realm a ser excluído. @return true se algum arquivo foi excluído, false caso contrário.

    Declaração

    Swift

    public static func deleteFiles(for config: Configuration) throws -> Bool

Domínio

  • Um editor que emite um cancelamento toda vez que o objeto muda.

    Apesar do nome, isso na verdade é emitido após a mudança da collection.

    Declaração

    Swift

    public var objectWillChange: RealmPublishers.RealmWillChange { get }
  • Estrutura que descreve os códigos de erro no domínio de erro do Realm. Os valores podem ser usados para detectar uma variedade de erros recuperáveis , especialmente aqueles que ocorrem ao inicializar uma instância do Realm.

    let realm: Realm?
    do {
        realm = try Realm()
    } catch Realm.Error.incompatibleLockFile {
        print("Realm Browser app may be attached to Realm on device?")
    }
    

    Declaração

    Swift

    public typealias Error = RLMError
  • Declaração

    Swift

    extension Realm.Error
    extension Realm.Error: Equatable

Equalizável

  • Executa o bloco de migração da configuração do Realm fornecido em um Realm no caminho fornecido.

    Este método é chamado automaticamente ao abrir um Realm pela primeira vez e não precisa ser chamado explicitamente. Você pode optar por chamar esse método para controlar exatamente quando e como as migrações são realizadas.

    Declaração

    Swift

    public static func performMigration(for configuration: Realm.Configuration = Realm.Configuration.defaultConfiguration) throws

    Parâmetros

    configuration

    A configuração do Realm costumava abrir e migrar o Realm.

  • Retorna se duas instâncias Realm são iguais.

    Declaração

    Swift

    public static func == (lhs: Realm, rhs: Realm) -> Bool

Notificações

  • Uma notificação indicando que as alterações foram feitas em um Realm.

    Veja mais

    Declaração

    Swift

    @frozen
    public enum Notification : String
  • init(configuration:) Assíncrono

    Obtém uma instância do Realm com a configuração fornecida, possivelmente de forma assíncrona. Por padrão, isso simplesmente retorna a Instância de Realm exatamente como se o inicializador síncrono fosse usado. Opcionalmente, ele pode abrir o Realm de forma assíncrona, executando todo o trabalho necessário para colocar o Realm em um estado utilizável em um thread em segundo plano. Para Realms locais, isso significa que as migrações serão executadas em segundo plano e, para Realms sincronizados, todos os dados serão baixados do servidor antes que o Realm seja retornado.

    Lança

    Um NSError se o Realm não puder ser inicializado.

    Declaração

    Swift

    @MainActor
    public init(configuration: Realm.Configuration = .defaultConfiguration) async throws

    Parâmetros

    configuration

    A configuration object to use when opening the Realm. all data from the server.

    Valor de retorno

    Um Realm aberto.

  • Obtém de forma assíncrona uma instância Realm isolada para o ator fornecido.

    Abrir um Realm com um ator isola o Realm para esse ator. Em vez de estar confinado ao thread específico em que o Realm foi aberto, o Realm só pode ser usado dentro desse ator ou funções isoladas para esse ator. Isolar um Realm para um ator também permite usar asyncWrite e asyncRefresh.

    Todo o trabalho de inicialização para preparar o Realm para o trabalho, como criar, migrar ou compactar o arquivo no disco, e esperar que os Realms sincronizados baixem os dados mais recentes do servidor, é feito em um thread de background e não bloqueia o executor de chamada.

    Ao usar Realms isolados por atores, é altamente recomendável ativar a verificação de simultaneidade de estruturas (SWIFT_STRICT_CONCURRENCY=complete no Xcode) e a detecção de corrida de dados em tempo de execução (passando -Xfrontend -enable-actor-data-race-checks para o compilador).

    Lança

    Um NSError se o Realm não puder ser inicializado. CancellationError se a tarefa for cancelada.

    Declaração

    Swift

    public init<A: Actor>(configuration: Realm.Configuration = .defaultConfiguration,
                          actor: A) async throws

    Parâmetros

    configuration

    Um objeto de configuração para usar ao abrir o Realm.

    actor

    O ator ao qual confinar este Realm. O ator pode ser um ator local ou um ator global. A função de chamada não precisa ser isolada para o ator passado, mas, se não for, não poderá usar o Realm retornado.

    Valor de retorno

    Um Realm aberto.

  • Asynchronously obtains a Realm instance isolated to the current Actor.

    Abrir um Realm com um ator isola o Realm para esse ator. Em vez de estar confinado ao thread específico em que o Realm foi aberto, o Realm só pode ser usado dentro desse ator ou funções isoladas para esse ator. Isolar um Realm para um ator também permite usar asyncWrite e asyncRefresh.

    Todo o trabalho de inicialização para preparar o Realm para o trabalho, como criar, migrar ou compactar o arquivo no disco, e esperar que os Realms sincronizados baixem os dados mais recentes do servidor, é feito em um thread de background e não bloqueia o executor de chamada.

    Lança

    Um NSError se o Realm não puder ser inicializado. CancellationError se a tarefa for cancelada.
  • asyncWrite(_:) Assíncrono

    Executa ação contidas dentro do bloco fornecido dentro de uma transação de escrita.

    Essa função difere do write síncrono porque suspende a tarefa de chamada enquanto espera a sua vez de escrever em vez de bloquear o thread. Além disso, a E/S real para escrever dados em disco é feita por uma thread de trabalho em background. Para escritas pequenas, usar essa função na thread principal pode bloquear a thread principal por menos tempo do que encaminhar manualmente a escrita para uma thread em background.

    Se o bloqueio gerar um erro, a transação será cancelada e todas as alterações feitas antes do erro serão revertidas.

    Somente uma transação de escrita pode ser aberta por vez para cada Arquivo de Realm. As transações de escrita não podem ser aninhadas, e tentar iniciar uma transação de escrita em um Realm que já esteja em uma transação de escrita lançará uma exceção. As chamadas para write de instâncias Realm para o mesmo Arquivo de Realm em outras threads ou outros processos serão bloqueadas até que a transação de escrita atual seja concluída ou cancelada.

    Antes de iniciar a transação de escrita, o asyncWrite atualiza a instância do Realm para a Versão do Realm, como se o asyncRefresh() tivesse sido chamado e gera notificações, se aplicável. Isso não tem efeito se o Realm já estiver atualizado.

    Você pode ignorar a notificação de blocos de notificações específicos sobre as alterações feitas nessa transação de escrita passando seus tokens de notificação associados. Isso é útil principalmente quando a transação de gravação está salvando as alterações já feitas na interface do usuário e você não deseja que o bloqueio de notificação tente reaplicar as mesmas alterações.

    Os tokens passados para esta função devem ser para notificações para este Realm que foram adicionados no mesmo ator em que a transação de escrita está sendo executada. As notificações de threads diferentes não podem ser ignoradas usando esse método.

    Lança

    Um NSError se a transação não puder ser concluída com sucesso. CancellationError se a tarefa for cancelada. Se block lançar, a função lançará o ErrorType propagado.

    Declaração

    Swift

    @discardableResult
    @_unsafeInheritExecutor
    public func asyncWrite<Result>(_ block: (() throws -> Result)) async throws -> Result

    Parâmetros

    tokens

    Uma array de tokens de notificação que foram retornados após a adição de chamadas de resposta que você não deseja que sejam notificadas sobre as alterações feitas nessa transação de escrita.

    block

    O bloco contendo ação a serem executadas.

    Valor de retorno

    O valor retornado do bloco, se houver.

  • asyncRefresh() Assíncrono

    Atualiza o Realm e os objeto pendentes managed pelo Realm para ponto para os dados mais recentes e fornecer quaisquer notificações aplicáveis.

    Essa função deve ser usada em vez do refresh síncrono em funções assíncronas, pois suspende a tarefa de chamada (se necessário) em vez de bloquear.

    Aviso

    Essa função só é compatível com thread principal e Realms isolados por atores.

    Declaração

    Swift

    @discardableResult
    @_unsafeInheritExecutor
    public func asyncRefresh() async -> Bool

    Valor de retorno

    Se houve atualizações para o Realm. Observe que true pode ser retornado mesmo que nenhum dado seja realmente alterado.

  • Executa ação contidas dentro do bloco fornecido dentro de uma transação de escrita.

    Essa função difere do write síncrono porque suspende a tarefa de chamada enquanto espera a sua vez de escrever em vez de bloquear o thread. Além disso, a E/S real para escrever dados em disco é feita por uma thread de trabalho em background. Para escritas pequenas, usar essa função na thread principal pode bloquear a thread principal por menos tempo do que encaminhar manualmente a escrita para uma thread em background.

    Se o bloqueio gerar um erro, a transação será cancelada e todas as alterações feitas antes do erro serão revertidas.

    Somente uma transação de escrita pode ser aberta por vez para cada Arquivo de Realm. As transações de escrita não podem ser aninhadas, e tentar iniciar uma transação de escrita em um Realm que já esteja em uma transação de escrita lançará uma exceção. As chamadas para write de instâncias Realm para o mesmo Arquivo de Realm em outras threads ou outros processos serão bloqueadas até que a transação de escrita atual seja concluída ou cancelada.

    Antes de iniciar a transação de escrita, o asyncWrite atualiza a instância do Realm para a Versão do Realm, como se o asyncRefresh() tivesse sido chamado e gera notificações, se aplicável. Isso não tem efeito se o Realm já estiver atualizado.

    Você pode ignorar a notificação de blocos de notificações específicos sobre as alterações feitas nessa transação de escrita passando seus tokens de notificação associados. Isso é útil principalmente quando a transação de gravação está salvando as alterações já feitas na interface do usuário e você não deseja que o bloqueio de notificação tente reaplicar as mesmas alterações.

    Os tokens passados para esta função devem ser para notificações para este Realm que foram adicionados no mesmo ator em que a transação de escrita está sendo executada. As notificações de threads diferentes não podem ser ignoradas usando esse método.

    Lança

    Um NSError se a transação não puder ser concluída com sucesso. CancellationError se a tarefa for cancelada. Se block lançar, a função lançará o ErrorType propagado.

  • Atualiza o Realm e os objeto pendentes managed pelo Realm para ponto para os dados mais recentes e fornecer quaisquer notificações aplicáveis.

    Essa função deve ser usada em vez do refresh síncrono em funções assíncronas, pois suspende a tarefa de chamada (se necessário) em vez de bloquear.

    Aviso

    Essa função só é compatível com thread principal e Realms isolados por atores.
  • Uma instância Configuration descreve as diferentes opções usadas para criar uma instância de um Realm.

    Configuration instâncias são estruturas Swift simples. Ao contrário de Realms e Objects, eles podem ser compartilhados livremente entre threads, desde que você não os altere.

    Criar valores de configuração para subconjuntos de classe (definindo a propriedade objectClasses ) pode ser caro. Por esse motivo, normalmente você desejará armazenar em cache e reutilizar um único valor de configuração para cada configuração distinta, em vez de criar um novo valor sempre que abrir um Realm.

    Veja mais

    Declaração

    Swift

    @frozen
    public struct Configuration : Sendable
    extension Realm.Configuration: CustomStringConvertible
    extension Realm.Configuration: Equatable

Referência segura de threads

  • Retorna o mesmo objeto que o referenciado quando o ThreadSafeReference foi criado pela primeira vez, mas resolvido para o Realm atual para este thread. Retorna nil se este objeto foi excluído depois que a referência foi criada.

    Aviso

    Um objeto ThreadSafeReference deve ser resolvido no máximo uma vez. A não resolução de um ThreadSafeReference fará com que a versão de origem do Realm seja fixada até que a referência seja desalocada. Uma exceção será lançada se uma referência for resolvida mais de uma vez.

    Aviso

    Não é possível chamar dentro de uma transação de escrita.

    Observação

    Atualizará este Realm se o Realm de origem estiver em uma versão posterior a esta.

    Veja

    ThreadSafeReference(to:)

    Declaração

    Swift

    public func resolve<Confined>(_ reference: ThreadSafeReference<Confined>) -> Confined? where Confined : ThreadConfined

    Parâmetros

    reference

    A referência segura de thread para o objeto confinado a thread para resolver neste Realm.