SwiftUI || O que é o wrapper da propriedade @State?

Apr 25 2023
Em SwiftUI, @State costuma ser usado em uma estrutura para declarar uma propriedade cujo valor pode mudar com o tempo e que pode acionar a renderização novamente da exibição quando o valor é atualizado. Quando devemos usar @state? Devemos usar o wrapper da propriedade @State no SwiftUI sempre que tivermos uma propriedade que precise ser mutável e cujas alterações devam fazer com que a exibição seja atualizada automaticamente.

Em SwiftUI, @Stategeralmente é usado em uma estrutura para declarar uma propriedade cujo valor pode mudar com o tempo e que pode acionar a renderização novamente da exibição quando o valor é atualizado.

Quando devemos usar @state?

Devemos usar o @Statewrapper de propriedade no SwiftUI sempre que tivermos uma propriedade que precise ser mutável e cujas alterações devam fazer com que a exibição seja atualizada automaticamente.

Em outras palavras, você deve usar @Statepara propriedades que fazem parte do estado interno da exibição e

pode mudar ao longo do tempo como resultado da interação do usuário ou outros eventos. Exemplos de propriedades que podem usar @Stateincluem

  • A guia selecionada em uma exibição de guia
  • O progresso atual de um indicador de carregamento
  • O texto em um campo de texto
  • O estado de uma alternância ou interruptor
  • A página atual em uma exibição de página

É importante observar que @Statedeve ser usado apenas para propriedades que fazem parte do estado interno da exibição. Se você precisar gerenciar o estado compartilhado entre várias exibições ou componentes, deverá usar outros wrappers de propriedade, como @Binding, @ObservedObjectou @EnvironmentObject.

Vamos dar um exemplo

Quando você declara uma propriedade com o @Statewrapper de propriedade em um struct, o valor dessa propriedade é armazenado em um local de memória separado fora do struct e o struct obtém uma referência a esse valor. Isso permite que a exibição seja renderizada novamente automaticamente quando o valor da @Statepropriedade for alterado, sem exigir que a exibição seja reinicializada.

Aqui está um exemplo de como @Statepode ser usado em uma estrutura no SwiftUI:

struct ContentView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Text("Count: \(count)")
            Button("Increment Count") {
                count += 1
            }
        }
    }
}

Como usamos o @Statewrapper de propriedade para declarar a countvariável, qualquer alteração na countvariável acionará a renderização novamente da exibição, que atualizará o valor exibido da Textexibição.

Este é um exemplo básico de como @Stateas propriedades podem ser usadas no SwiftUI. @StateAs propriedades são muito úteis para gerenciar o estado em aplicativos SwiftUI, pois permitem criar exibições dinâmicas que podem responder a alterações nos dados.

Outro exemplo de problema da vida real

struct ContentView: View {
    @State private var username: String = ""
    @State private var password: String = ""
    @State private var rememberMe: Bool = false
    @State private var loginError: Bool = false

    var body: some View {
        VStack {
            TextField("Username", text: $username)
                .padding()
            SecureField("Password", text: $password)
                .padding()
            Toggle("Remember Me", isOn: $rememberMe)
                .padding()
            Button("Log In") {
                // Perform login logic here...
                if username == "user" && password == "password" {
                    // Successful login
                    loginError = false
                } else {
                    // Failed login
                    loginError = true
                }
            }
            .alert(isPresented: $loginError) {
                Alert(title: Text("Error"), message: Text("Invalid username or password"), dismissButton: .default(Text("OK")))
            }
        }
        .padding()
    }
}

Codificação feliz !