Uso de Estado e Dependência

August 26, 2025 · View on GitHub

AppState fornece ferramentas poderosas para gerenciar o estado de toda a aplicação e injetar dependências em visualizações SwiftUI. Ao centralizar seu estado e dependências, você pode garantir que sua aplicação permaneça consistente e de fácil manutenção.

Visão Geral

  • Estado: Representa um valor que pode ser compartilhado em toda a aplicação. Os valores de estado podem ser modificados e observados em suas visualizações SwiftUI.
  • Dependência: Representa um recurso ou serviço compartilhado que pode ser injetado e acessado em visualizações SwiftUI.

Principais Características

  • Estado Centralizado: Defina e gerencie o estado de toda a aplicação em um só lugar.
  • Injeção de Dependência: Injete e acesse serviços e recursos compartilhados em diferentes componentes da sua aplicação.

Exemplo de Uso

Definindo o Estado da Aplicação

Para definir o estado de toda a aplicação, estenda o objeto Application e declare as propriedades de estado.

import AppState

struct User {
    var name: String
    var isLoggedIn: Bool
}

extension Application {
    var user: State<User> {
        state(initial: User(name: "Guest", isLoggedIn: false))
    }
}

Acessando e Modificando o Estado em uma Visualização

Você pode acessar e modificar os valores de estado diretamente em uma visualização SwiftUI usando o property wrapper @AppState.

import AppState
import SwiftUI

struct ContentView: View {
    @AppState(\.user) var user: User

    var body: some View {
        VStack {
            Text("Olá, \(user.name)!")
            Button("Fazer login") {
                user.name = "John Doe"
                user.isLoggedIn = true
            }
        }
    }
}

Definindo Dependências

Você pode definir recursos compartilhados, como um serviço de rede, como dependências no objeto Application. Essas dependências podem ser injetadas em visualizações SwiftUI.

import AppState

protocol NetworkServiceType {
    func fetchData() -> String
}

class NetworkService: NetworkServiceType {
    func fetchData() -> String {
        return "Data from network"
    }
}

extension Application {
    var networkService: Dependency<NetworkServiceType> {
        dependency(NetworkService())
    }
}

Acessando Dependências em uma Visualização

Acesse as dependências em uma visualização SwiftUI usando o property wrapper @AppDependency. Isso permite injetar serviços como um serviço de rede em sua visualização.

import AppState
import SwiftUI

struct NetworkView: View {
    @AppDependency(\.networkService) var networkService: NetworkServiceType

    var body: some View {
        VStack {
            Text("Dados: \(networkService.fetchData())")
        }
    }
}

Combinando Estado e Dependências em uma Visualização

Estado e dependências podem trabalhar juntos para construir uma lógica de aplicação mais complexa. Por exemplo, você pode buscar dados de um serviço e atualizar o estado:

import AppState
import SwiftUI

struct CombinedView: View {
    @AppState(\.user) var user: User
    @AppDependency(\.networkService) var networkService: NetworkServiceType

    var body: some View {
        VStack {
            Text("Usuário: \(user.name)")
            Button("Buscar Dados") {
                user.name = networkService.fetchData()
                user.isLoggedIn = true
            }
        }
    }
}

Melhores Práticas

  • Centralize o Estado: Mantenha o estado de toda a sua aplicação em um só lugar para evitar duplicação e garantir a consistência.
  • Use Dependências para Serviços Compartilhados: Injete dependências como serviços de rede, bancos de dados ou outros recursos compartilhados para evitar um acoplamento forte entre os componentes.

Conclusão

Com o AppState, você pode gerenciar o estado de toda a aplicação e injetar dependências compartilhadas diretamente em suas visualizações SwiftUI. Este padrão ajuda a manter sua aplicação modular e de fácil manutenção. Explore outras funcionalidades da biblioteca AppState, como SecureState e SyncState, para aprimorar ainda mais o gerenciamento de estado da sua aplicação.


Esta tradução foi gerada automaticamente e pode conter erros. Se você é um falante nativo, agradecemos suas contribuições com correções por meio de um Pull Request.