Uso de Slice e OptionalSlice

August 26, 2025 · View on GitHub

Slice e OptionalSlice são componentes da biblioteca AppState que permitem acessar partes específicas do estado da sua aplicação. Eles são úteis quando você precisa manipular ou observar uma parte de uma estrutura de estado mais complexa.

Visão Geral

  • Slice: Permite acessar e modificar uma parte específica de um objeto State existente.
  • OptionalSlice: Funciona de forma semelhante a Slice, mas é projetado para lidar com valores opcionais, como quando parte do seu estado pode ou não ser nil.

Principais Características

  • Acesso Seletivo ao Estado: Acesse apenas a parte do estado de que você precisa.
  • Segurança de Threads: Assim como outros tipos de gerenciamento de estado no AppState, Slice e OptionalSlice são seguros para threads.
  • Reatividade: As visualizações do SwiftUI são atualizadas quando a fatia do estado muda, garantindo que sua interface do usuário permaneça reativa.

Exemplo de Uso

Usando Slice

Neste exemplo, usamos Slice para acessar e atualizar uma parte específica do estado — neste caso, o username de um objeto User mais complexo armazenado no estado da aplicação.

import AppState
import SwiftUI

struct User {
    var username: String
    var email: String
}

extension Application {
    var user: State<User> {
        state(initial: User(username: "Guest", email: "guest@example.com"))
    }
}

struct SlicingView: View {
    @Slice(\.user, \.username) var username: String

    var body: some View {
        VStack {
            Text("Nome de usuário: \(username)")
            Button("Atualizar Nome de Usuário") {
                username = "NewUsername"
            }
        }
    }
}

Usando OptionalSlice

OptionalSlice é útil quando parte do seu estado pode ser nil. Neste exemplo, o próprio objeto User pode ser nil, então usamos OptionalSlice para lidar com este caso com segurança.

import AppState
import SwiftUI

extension Application {
    var user: State<User?> {
        state(initial: nil)
    }
}

struct OptionalSlicingView: View {
    @OptionalSlice(\.user, \.username) var username: String?

    var body: some View {
        VStack {
            if let username = username {
                Text("Nome de usuário: \(username)")
            } else {
                Text("Nenhum nome de usuário disponível")
            }
            Button("Definir Nome de Usuário") {
                username = "UpdatedUsername"
            }
        }
    }
}

Melhores Práticas

  • Use Slice para estado não opcional: Se o seu estado for garantido como não opcional, use Slice para acessá-lo e atualizá-lo.
  • Use OptionalSlice para estado opcional: Se o seu estado ou parte do estado for opcional, use OptionalSlice para lidar com casos em que o valor pode ser nil.
  • Segurança de Threads: Assim como State, Slice e OptionalSlice são seguros para threads e projetados para funcionar com o modelo de concorrência do Swift.

Conclusão

Slice e OptionalSlice fornecem maneiras poderosas de acessar e modificar partes específicas do seu estado de maneira segura para threads. Ao aproveitar esses componentes, você pode simplificar o gerenciamento de estado em aplicações mais complexas, garantindo que sua interface do usuário permaneça reativa e atualizada.


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.