Swift Academy · Aula

Views Equatable e Escopo de @State

Restrinja o estado para limitar invalidações.

Aula 3 de 413 etapas

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.

Grátis para começar

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

  1. Entendendo a Identidade das Views
  2. Minimização da Reavaliação de Body
  3. Views Equatable e Escopo de @State
  4. Criação de Perfil com o Instrument do SwiftUI
← Voltar para Swift Academy