Executando verificação de segurança...
4

Descomplicando o Redux em SwiftUI: Aprendendo com um App de Filmes Interativo

Utilizando o Design Pattern Redux em SwiftUI: Um Guia para Aplicativos de Filmes

O padrão Redux é uma arquitetura de aplicativo previsível para o gerenciamento de estados em ambientes JavaScript. No entanto, também pode ser aplicado com êxito no desenvolvimento de aplicativos Swift, especialmente quando combinado com SwiftUI. Neste artigo, explicaremos como usar o design pattern Redux em SwiftUI com o exemplo de um aplicativo de filmes.

O que é o Redux?

Redux é uma biblioteca de JavaScript para gerenciar o estado do aplicativo, que se tornou bastante popular na comunidade React. É baseado no padrão Flux da Facebook, mas simplificado e com algumas alterações.

Entendendo o Redux

Redux é composto por três componentes principais:

  • Estado (State): É a fonte única de verdade. Todo o estado do seu aplicativo é armazenado em um único objeto de estado grande, imutável.
  • Ações (Actions): São eventos que ocorrem na aplicação, eles podem ser disparados pelos usuários (por exemplo, clicando em um botão) ou por outros eventos no sistema.
  • Reducers: São funções puras que pegam o estado atual e uma ação e devolvem um novo estado.

Como o Redux pode ser usado com SwiftUI?

Para usar o Redux com SwiftUI, aplicaremos o conceito de estado e ligação (binding) do SwiftUI. O estado é usado para armazenar informações que podem ser modificadas e usadas em diferentes partes do aplicativo. A ligação é uma forma de conectar o estado às visualizações do SwiftUI, permitindo a atualização automática das visualizações sempre que o estado é alterado.

Agora, vamos ver como implementar esse design pattern no SwiftUI através de um exemplo simples de aplicativo de filmes.

Exemplo de código: Aplicativo de Filmes

Em nosso aplicativo de filmes, teremos uma lista de filmes e a capacidade de adicionar novos filmes à lista. Usaremos o Redux para gerenciar o estado dos filmes.

Primeiro, vamos definir a estrutura do nosso Filme e o Estado do Aplicativo:

struct Filme {
    var id: Int
    var titulo: String
}

struct AppState {
    var filmes: [Filme]
}

Agora, vamos definir as ações que podemos fazer em nosso aplicativo:

enum AppAction {
    case adicionarFilme(Filme)
}

Vamos definir o Reducer:

func appReducer(state: inout AppState, action: AppAction) -> AppState {
    switch action {
    case .adicionarFilme(let filme):
        state.filmes.append(filme)
    }
    return state
}

Agora, vamos criar a Store que mantém o estado do aplicativo e a lógica do Reducer:

class Store: ObservableObject {
    @Published var state: AppState
    
    init(state: AppState = AppState(filmes: [])) {
        self.state = state
    }
    
    func dispatch(action: AppAction) {
        self.state = appReducer(state: &state, action: action)
    }
}

Finalmente, vamos usar nossa Store em uma View:

struct ContentView: View {
    @ObservedObject var store: Store

    var body: some View {
        List {
            ForEach(store.state.filmes, id: \.id) { filme in
                Text(filme.titulo)
            }
        }
        Button(action: {
           

 let novoFilme = Filme(id: store.state.filmes.count + 1, titulo: "Novo Filme")
            store.dispatch(action: .adicionarFilme(novoFilme))
        }) {
            Text("Adicionar Filme")
        }
    }
}

Neste exemplo, criamos uma aplicação que segue o padrão Redux para gerenciar o estado. Cada vez que um novo filme é adicionado, o estado é atualizado e a lista de filmes na View é atualizada automaticamente graças ao recurso de binding do SwiftUI.

Carregando publicação patrocinada...