Menu
Coddy logo textTech

Свойство @Binding

Часть раздела Введение в SwiftUI путешествия по Swift на Coddy. Урок 39 из 50.

Когда экран увеличивается, разделяй его на меньшие представления. Дочернее представление, которому необходимо изменять состояние родительского представления, объявляет @Binding вместо владения этим значением:

struct VolumeControl: View {
    @Binding var volume: Int

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

Родительский компонент хранит @State и передаёт привязку к нему с помощью $:

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

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

Есть одно значение, принадлежащее ContentView. Степпер в дочернем представлении изменяет его через привязку, а текст родительского представления следует за ним. @State владеет значением; @Binding заимствует его откуда-то ещё.

challenge icon

Задание

Средне

ThemeToggle должен переключать darkMode родительского представления. Измените его свойство на @Binding, свяжите с ним его Toggle и передайте $darkMode из ContentView. Когда переключатель включён, текст должен быть Dark theme.

Попробуйте сами

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в SwiftUI

Потренируйтесь самостоятельно: Песочница Swift