Views Equatable e Escopo de @State
Restrinja o estado para limitar invalidações.
Views Equatable e Escopo de @State é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
A igualdade pode evitar trabalho
Se o SwiftUI puder provar que as entradas de uma visualização não mudaram, ele poderá evitar renderizá-la novamente. Tornar uma visualização Equatable oferece ao SwiftUI uma maneira precisa de decidir.
Conformidade com Equatable
Faça sua visualização conformar-se a Equatable para que o SwiftUI compare os valores antigo e novo. Se forem iguais, ele ignorará o body.
struct Badge: View, Equatable {
let count: Int
var body: some View { Text("\(count)") }
static func == (a: Badge, b: Badge) -> Bool {
a.count == b.count
}
}EquatableView
Você também pode envolver qualquer visualização Equatable com .equatable() para solicitar que ela seja ignorada com base em comparação, sem alterar os locais de chamada do tipo em todo o código.
Badge(count: total)
.equatable()Quando Equatable ajuda
Equatable é especialmente útil para visualizações com entradas fáceis de comparar, mas com bodies caros. O custo da comparação precisa ser muito menor que o custo da renderização para compensar.
A armadilha do custo da comparação
Se o seu == também for caro, como em uma comparação profunda de grandes matrizes, ele poderá custar mais do que a renderização que você está tentando evitar. Compare apenas campos baratos e decisivos.
static func == (a: Self, b: Self) -> Bool {
a.id == b.id && a.version == b.version // cheap fields
}Equatable sintetizado por padrão
Se todas as propriedades armazenadas forem Equatable, o Swift poderá sintetizar ==. Porém, fechamentos e alguns tipos não são Equatable, então talvez você precise de uma implementação personalizada que os ignore.
struct Card: View, Equatable {
let title: String
let onTap: () -> Void // not Equatable
static func == (a: Card, b: Card) -> Bool { a.title == b.title }
var body: some View { Text(title) }
}Reduzindo o escopo de @State
Um estado colocado alto demais na hierarquia renderiza novamente tudo que está abaixo dele. Mova @State para a menor visualização que o possui, para que as alterações afetem o mínimo possível da interface.
// Move toggle state into the row that uses it
struct Row: View {
@State private var expanded = false
var body: some View { /* only this row re-renders */ Text("Row") }
}Elevando o estado apenas quando compartilhado
Eleve o estado somente quando várias visualizações realmente precisarem dele. Caso contrário, o estado local mantém pequeno o raio de impacto das renderizações.
Extraindo subvisualizações para localizar atualizações
Extrair uma parte que muda com frequência para sua própria visualização restringe a reavaliação a essa visualização, deixando as irmãs intactas.
struct LiveClock: View {
@State private var now = Date()
var body: some View { Text(now, style: .time) }
}Vinculações e escopo
Um @Binding conecta uma visualização filha ao estado da visualização pai. Passar uma vinculação restrita, de um único campo, em vez do objeto inteiro limita quais alterações se propagam.
struct NameField: View {
@Binding var name: String // narrow binding
var body: some View { TextField("Name", text: $name) }
}Combinando Equatable com escopo
Os melhores resultados vêm da combinação de técnicas: manter o estado em um escopo restrito para reduzir os gatilhos e usar Equatable para ignorar as renderizações que ainda ocorrerem.
Verificação rápida: visualizações Equatable
Teste sua compreensão sobre visualizações Equatable e escopo de estado.
Recapitulação: visualizações Equatable e escopo de estado
Tornar uma visualização Equatable, ou usar .equatable(), permite que o SwiftUI ignore renderizações sem alterações — uma estratégia vantajosa quando a comparação é muito mais barata que a renderização e usa apenas campos decisivos.
Restrinja @State à menor visualização que possui o estado, passe vinculações restritas e extraia as partes voláteis para suas próprias visualizações. Combinar um escopo de estado preciso com Equatable produz o menor número possível de renderizações, com o menor custo.
Aprenda Swift com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 122
- Aulas
- 409
Perguntas Frequentes
A aula “Views Equatable e Escopo de @State” é grátis?
Sim — o texto completo de “Views Equatable e Escopo de @State” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “Views Equatable e Escopo de @State”?
Restrinja o estado para limitar invalidações. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Views Equatable e Escopo de @State”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Entendendo a Identidade das Views
- Minimização da Reavaliação de Body
- Views Equatable e Escopo de @State
- Criação de Perfil com o Instrument do SwiftUI