Wrappers em Swift: @State e @Binding - Instituto Eldorado
26 de Agosto de 2024

Wrappers em Swift: @State e @Binding

Gabriel

Gabriel Fernandes Thomaz

Autor

Wrappers em Swift são mecanismos que permitem que o framework SwiftUI gerencie e atualize o estado da interface de usuário de maneira eficiente e declarativa. Eles são fundamentais porque permitem que o SwiftUI reaja automaticamente às mudanças de estado, mantendo a interface do usuário sincronizada com os dados subjacentes sem a necessidade de manipulações complexas. Entre os principais wrappers de propriedade, destacam-se @State, @Binding, @ObservedObject, @EnvironmentObject e @StateObject. O @State é usado para gerenciar o estado interno de uma view, enquanto @Binding cria uma ligação bidirecional com uma propriedade de estado externa, facilitando a comunicação entre views. O @ObservedObject e @StateObject são utilizados para
gerenciar e observar estados de objetos que conformam o protocolo ObservableObject, sendo @StateObject preferível quando o objeto é criado dentro da view. Por fim, @EnvironmentObject permite compartilhar dados entre várias views sem necessidade de passagem explícita de propriedades, aproveitando um modelo
de injeção de dependências simples.

Saiba mais: All SwiftUI property wrappers explained and compared

State

O @State é usado para armazenar informações que são específicas para uma única view e que podem mudar ao longo do tempo, como a contagem em um botão de incrementar. Para declarar uma variável com @State, utiliza-se o mesmo antes da variável. Quando o estado é atualizado, SwiftUI automaticamente re-renderiza a view
para refletir as mudanças, mantendo a interface do usuário sincronizada com o estado atual.

//Sintaxe
@State var valorModificavel = “”

Exemplo: How to read text from a TextField

Binding

É utilizado quando você deseja que uma view filha modifique o estado gerenciado por uma view pai. Pode-se passar essa propriedade como um argumento para a view filha, utilizando o prefixo @Binding na declaração da variável. Por exemplo, se uma view pai tem um estado @State para um valor e quer permitir que uma view filha altere esse valor, você passa o Binding do estado para a view filha.

//Sintaxe
@Binding var valorModificavel: Bool

Exemplo: What is the @Binding property wrapper?

Em resumo, o @State deve ser utilizado para dados que são exclusivos de uma view, é eficiente porque aciona atualizações apenas nas partes da interface que dependem do estado modificado, enquanto @Binding é mais adequado para interações entre views. Usar @Binding para dados que não são diretamente modificados pela view pode levar a atualizações desnecessárias e aumento da complexidade, ou seja, pode potencialmente causar re-renderizações em cascata se não for gerenciado corretamente.

Cadastre-se em nossa newsletter