Introdução ao SwiftData

Raphael Iniesta
Apple Developer Academy | Mackenzie
4 min readMar 1, 2024

Quando criamos um aplicativo e queremos que ele salve os dados que foram mudados durante uma sessão, podemos utilizar o UserDefaults . Porém, essa não é uma boa ideia, pois seu uso está sendo descontinuado pela Apple. Uma alternativa é o CoreData que é complexo para desenvolvedores iniciantes. Por fim, existe o SwiftData, o novo método de salvar dados dos aplicativos, que foi anunciado no WWDC de 2023.

Neste artigo irei mostrar o básico para você começar a usar o SwiftData em seus projetos.

Configurando o SwiftData

Primeiramente vamos criar um novo projeto. Ele será uma lista simples de compras de mercado.

Criaremos um novo arquivo .swift e nele importaremos o SwiftData.

Agora vamos construir o nosso modelo de dados. O modelo deverá ser uma classe que chamarei de DataManager.

Antes de criar a classe, precisamos declarar o macro que irá transformá-la em um modelo de dados que pode ser gerenciado pelo SwiftData.

Macros são comandos que podem ser usados para evitar escrever repetidamente na mão. Isso acontece durante a compilação do seu programa ou aplicativo.

Deverá ficar como no exemplo a seguir:

Já temos a classe que salvará os dados persistentes. Apos isso, basta declarar dentro dela as variáveis dos dados e seus tipos, assim como o seu inicializador:

Precisamos declarar a configuração do esquema de armazenamento do aplicativo.

Para isso, selecione o arquivo <SeuAplicativo>App.swift e novamente importe o SwiftData.

Logo após o WindowGroup, precisamos mostrar o container em que iremos ler, escrever, editar e deletar dados. Deve ficar assim:

Usamos o objeto .modelContainer(for: DataMager.self) para criar o container com o esquema especificado.

Com isso, já temos tudo para começar a usar o SwiftData em nosso aplicativo.

Nosso próximo passo será criar as funções básicas de dados persistentes.

Criando as funções

Selecionando o arquivo em que manipularemos os dados, importaremos o SwiftData, definiremos o contexto e iremos requisitar o acesso a essas informações.

Para isso, utilizamos o @Enviroment para definir o contexto. O @Query é utilizado para chamar e gerenciar modelos, mantendo eles sincronizados.

Vamos ter algo semelhante a isso:

Então, criaremos as funções de adicionar e deletar os dados:

let item = DataManager(item: item) : Cria o objeto que será salvo, passando como parâmetro do item da classe DataManager o item que é passado como parâmetro da função.

context.insert(item) : Insere o item que foi criado no contexto do container de dados.

context.delete(item) : Deleta o item do contexto.

Por enquanto, a função de deletar dados pode parecer estranha, mas fará sentido mais a frente.

Já conseguimos adicionar e deletar items. Vamos colocar alguma interface para podermos usar essas funções:

Esse é um código básico do body de uma view em SwiftUI para podermos manipular os dados.

IMPORTANTE: A Preview não salva dados. Por isso é preciso usar o simulador.

Com o que foi feito até agora, os dados já estão sendo persistentes.

Precisaremos deletar alguns itens da lista também. Para isso, irei usar o .onDelete do Swift, assim:

Lembra aquela função de deletar que não fazia sentido? Aqui está o motivo.

O SwiftData armazena os dados em um array e para deletar um item, precisamos do index dele. Por isso esse código é necessário.

Há outras maneiras de fazer essa deleção, mas essa é a mais conveniente para esse caso, porque estamos utilizando uma List do SwiftUI.

Já sabemos adicionar e deletar objetos em SwiftData, mas também podemos editar esses dados.

Vamos criar uma função de atualização:

Existem diversas formas de atualizar as informações dos dados em SwiftData. Mas como esse não é o intuito do artigo, colocarei um valor fixo.

É necessário utilizar o try ao atualizar, porque pode ocorrer algum erro e não ser possível ser salvo. Isso nos permite lidar com esse problema.

Por fim, vamos colocar um método para podermos modificar os itens da lista:

Agora você já sabe o básico de SwiftData! Caso queira acessar o projeto que utilizei para ilustrar esse artigo, clique no link a seguir:

https://github.com/RaphaelIniesta/SwiftDataDemo

--

--