Introdução ao SwiftData
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: