Menu
Coddy logo textTech

A propriedade @Binding

Parte da seção Introdução ao SwiftUI do Journey de Swift da Coddy. Lição 39 de 50.

Quando uma tela cresce, você a divide em views menores. Uma view filha que precisa alterar o estado da view pai declara um @Binding em vez de ser proprietária do valor:

struct VolumeControl: View {
    @Binding var volume: Int

    var body: some View {
        Stepper("Volume: \(volume)", value: $volume, in: 0...10)
    }
}

O componente pai mantém o @State e passa uma vinculação a ele com $:

struct ContentView: View {
    @State private var volume = 5

    var body: some View {
        VStack {
            VolumeControl(volume: $volume)
            Text(volume == 0 ? "Muted" : "Playing")
        }
    }
}

Há um valor pertencente a ContentView. O stepper no componente filho o altera por meio da vinculação, e o texto do componente pai acompanha essa alteração. @State é proprietário de um valor; @Binding toma um emprestado de outro lugar.

challenge icon

Desafio

Médio

ThemeToggle deve alternar o darkMode do componente pai. Altere sua propriedade para um @Binding, vincule seu Toggle a ela e passe $darkMode de ContentView. O texto deve ser Dark theme enquanto o alternador estiver ativado.

Experimente você mesmo

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Introdução ao SwiftUI

Pratique por conta própria: Playground de Swift