Página inicial do Docs → Desenvolver aplicações → Atlas Device SDKs
CRUD — Excluir — Swift SDK
Nesta página
- Excluir objetos de Realm
- Sobre os exemplos nesta página
- Excluir um objeto
- Excluir vários objetos
- Excluir um objeto e seus objetos relacionados
- Exclua todos os objetos de um tipo específico
- Excluir todos os objetos em um Realm
- Exclua valores/chaves de mapa
- Exclua elementos do MutableSet
- Exclua o valor de um AnyRealmValue
- Exclua um objeto de forma assíncrona
Excluir objetos de Realm
A exclusão de objetos de Realm deve ocorrer nas transações de gravação. Para obter mais informações sobre como gravar transações, consulte: Transações.
Se você quiser excluir o próprio arquivo de Realm, consulte: Exclua um Realm.
Importante
Não use objetos após excluir
Você não pode acessar ou modificar um objeto depois de excluí-lo de um realm. Se tentar usar um objeto excluído, o Realm exibirá um erro.
Sobre os exemplos nesta página
Os exemplos nesta página usam os seguintes modelos:
Excluir um objeto
Excluir vários objetos
Excluir um objeto e seus objetos relacionados
Às vezes, você deseja excluir objetos relacionados quando exclui o objeto pai. Chamamos isso de exclusão de encadeamento. O Realm não exclui os objetos relacionados para você. Se você mesmo não excluir os objetos, eles permanecerão órfãos em seu Realm. Se isso causará ou não um problema, dependerá das necessidades do seu aplicativo.
A melhor maneira de excluir objetos dependentes é fazer a iteração por meio das dependências e excluí-los antes de excluir o objeto pai.
Exclua todos os objetos de um tipo específico
Excluir todos os objetos em um Realm
Exclua valores/chaves de mapa
Você pode excluir entradas de mapa de algumas maneiras:
Use
removeObject(for:)
para remover a chave e o valorSe o valor do dicionário for opcional, você poderá definir o valor da chave como
nil
para manter a chave.
let realm = try! Realm() // Find the dog we want to update let wolfie = realm.objects(Dog.self).where { $0.name == "Wolfie" }.first! // Delete an entry try! realm.write { // Use removeObject(for:) wolfie.favoriteParksByCity.removeObject(for: "New York") // Or assign `nil` to delete non-optional values. // If the value type were optional (e.g. Map<String, String?>) // this would assign `nil` to that entry rather than deleting it. wolfie.favoriteParksByCity["New York"] = nil } XCTAssertNil(wolfie.favoriteParksByCity["New York"])
Exclua elementos do MutableSet
Você pode excluir elementos específicos de um MutableSet ou limpar todos os elementos do conjunto. Se estiver trabalhando com vários conjuntos, também poderá remover elementos de um conjunto do outro conjunto; consulte: Atualizar uma propriedade MutableSet .
let realm = try! Realm() // Record a dog's name and list of cities he has visited. let dog = Dog() dog.name = "Maui" let dogCitiesVisited = ["New York", "Boston", "Toronto"] try! realm.write { realm.add(dog) dog.citiesVisited.insert(objectsIn: dogCitiesVisited) } XCTAssertEqual(dog.citiesVisited.count, 3) // Later... we decide the dog didn't really visit Toronto // since the plane just stopped there for a layover. // Remove the element from the set. try! realm.write { dog.citiesVisited.remove("Toronto") } XCTAssertEqual(dog.citiesVisited.count, 2) // Or, in the case where the person entered the data for // the wrong dog, remove all elements from the set. try! realm.write { dog.citiesVisited.removeAll() } XCTAssertEqual(dog.citiesVisited.count, 0)
Exclua o valor de um AnyRealmValue
Para excluir o valor de um AnyRealmValue, defina-o como .none
.
let realm = try! Realm() // Wolfie's companion is "Fluffy the Cat", represented by a string. // Fluffy has gone to visit friends for the summer, so Wolfie has no companion. let wolfie = realm.objects(Dog.self).where { $0.name == "Wolfie" }.first! try! realm.write { // You cannot set an AnyRealmValue to nil; you must set it to `.none`, instead. wolfie.companion = .none }
Exclua um objeto de forma assíncrona
Você pode usar os recursos de simultaneidade do Swift para excluir objetos de forma assíncrona usando um Realm isolado por atores.
Essa função do exemplo RealmActor
definida na página Use o Realm com atores mostra como excluir um objeto em um Realm isolado por atores:
func deleteTodo(id: ObjectId) async throws { try await realm.asyncWrite { let todoToDelete = realm.object(ofType: Todo.self, forPrimaryKey: id) realm.delete(todoToDelete!) } }
E você pode fazer essa exclusão usando a sintaxe assíncrona do Swift:
let actor = try await RealmActor() let todoId = await actor.getObjectId(forTodoNamed: "Keep Mr. Frodo safe from that Gollum") try await actor.deleteTodo(id: todoId) let updatedTodoCount = await actor.count if updatedTodoCount == todoCount - 1 { print("Successfully deleted the todo") }
Esta operação não bloqueia nem executa E/S no thread de chamada. Para obter mais informações sobre como gravar no Realm usando os recursos de simultaneidade do Swift, consulte Use o Realm com atores — Swift SDK.