Introdução

Neste tutorial, você aprenderá como desenvolver um aplicativo de lista de tarefas utilizando Swift com as tecnologias SwiftUI e Combine. O aplicativo permitirá que os usuários adicionem, removam e visualizem tarefas de forma reativa e intuitiva. Abordaremos cada passo do processo, desde a configuração inicial do projeto até a implementação da lógica de negócios e design da interface do usuário. Além de aprender a trabalhar com listas reativas, você dominará conceitos cruciais de gerenciamento de estado e binding em SwiftUI, tornando seu aplicativo não apenas funcional, mas também responsivo. Ideal para desenvolvedores que desejam aprimorar suas habilidades em desenvolvimento iOS, este guia lhe proporcionará um conhecimento prático e aplicável para criar apps modernos.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Antes de começar, certifique-se de ter instalado o Xcode mais recente em sua máquina. O Xcode é a IDE oficial para desenvolvimento em Swift e proporcionará todas as ferramentas necessárias para o projeto.

    commands
    # Verificar a versão do Xcode
    xcodebuild -version

  2. Criação do Projeto no Xcode

    Abra o Xcode e inicie um novo projeto selecionando ‘App’ na seção ‘iOS’. Dê um nome ao seu projeto, como ‘ListaDeTarefas’, e escolha Swift como a linguagem de programação. Certifique-se de que ‘SwiftUI’ esteja selecionado como a opção de interface.

  3. Modelagem da Tarefa

    Crie uma estrutura que representará a nossa tarefa. Adicione um arquivo Swift chamado ‘Task.swift’ e adicione as propriedades necessárias.

    Task.swift
    import Foundation
    
    struct Task: Identifiable {
        var id = UUID()
        var title: String
        var isCompleted: Bool = false
    }

  4. Criando o ViewModel

    Implemente um ViewModel que irá gerenciar a lista de tarefas e sua lógica de negócios. Crie um arquivo chamado ‘TaskViewModel.swift’. Utilize o Combine para lidar com a reatividade.

    TaskViewModel.swift
    import SwiftUI
    import Combine
    
    class TaskViewModel: ObservableObject {
        @Published var tasks: [Task] = []
    
        func addTask(title: String) {
            let newTask = Task(title: title)
            tasks.append(newTask)
        }
    
        func removeTask(atOffsets indices: IndexSet) {
            tasks.remove(atOffsets: indices)
        }
    }

  5. Construindo a Interface com SwiftUI

    Agora vamos criar a interface do usuário. Edite o ‘ContentView.swift’ para incluir uma lista que exibe as tarefas e um campo para adicionar novas tarefas.

    ContentView.swift
    import SwiftUI
    
    struct ContentView: View {
        @ObservedObject var viewModel = TaskViewModel()
        @State private var newTaskTitle: String = ""
    
        var body: some View {
            NavigationView {
                VStack {
                    TextField("Nova Tarefa", text: $newTaskTitle)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .padding()
                    Button(action: {
                        viewModel.addTask(title: newTaskTitle)
                        newTaskTitle = ""
                    }) {
                        Text("Adicionar")
                    }
                    List {
                        ForEach(viewModel.tasks) { task in
                            Text(task.title)
                        }
                        .onDelete(perform: viewModel.removeTask)
                    }
                }
                .navigationTitle("Lista de Tarefas")
            }
        }
    }

  6. Testando a Aplicação

    Compile e execute seu aplicativo no simulador do Xcode. A interface deve permitir adicionar e remover tarefas da lista. Novas tarefas devem aparecer imediatamente na lista, demonstrando a reatividade do Combine.

    commands
    # Compilar e executar a aplicação
    Command + R

  7. Implementação de Testes Unitários

    Crie testes para o ViewModel para garantir que suas funções de adicionar e remover tarefas estão funcionando adequadamente. Adicione um novo arquivo chamado ‘TaskViewModelTests.swift’.

    TaskViewModelTests.swift
    import XCTest
    @testable import ListaDeTarefas
    
    class TaskViewModelTests: XCTestCase {
        func testAddTask() {
            let viewModel = TaskViewModel()
            viewModel.addTask(title: "Testar")
            XCTAssertEqual(viewModel.tasks.count, 1)
            XCTAssertEqual(viewModel.tasks[0].title, "Testar")
        }
    
        func testRemoveTask() {
            let viewModel = TaskViewModel()
            viewModel.addTask(title: "Testar")
            viewModel.removeTask(atOffsets: IndexSet(integer: 0))
            XCTAssertEqual(viewModel.tasks.count, 0)
        }
    }

  8. Executando os Testes

    Utilize o Xcode para rodar seus testes. Vá até o menu superior, clique em ‘Product’, depois ‘Test’, ou utilize o atalho Command + U para verificar se todos os testes estão passando.

Conclusão

Neste tutorial, você aprendeu a desenvolver um aplicativo de lista de tarefas utilizando SwiftUI e Combine. Através da configuração do ambiente de desenvolvimento, criação da estrutura de dados, implementação do ViewModel e construção da interface do usuário, você foi capaz de criar um app reativo e funcional. Além disso, a adição de testes unitários solidifica a confiabilidade do seu código. Com esta base, você pode explorar mais funcionalidades, como persistência de dados ou integração com APIs, ampliando ainda mais seus conhecimentos em desenvolvimento iOS.

Hashtags

#Swift #SwiftUI #Combine #iOSDevelopment #Xcode #Reatividade