Свойство @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 заимствует его откуда-то ещё.
Задание
СреднеThemeToggle должен переключать darkMode родительского представления. Измените его свойство на @Binding, свяжите с ним его Toggle и передайте $darkMode из ContentView. Когда переключатель включён, текст должен быть Dark theme.
Попробуйте сами
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в SwiftUI
10Проект — Coddy Coffee
Обзор проектаЭкраны напитков2Отображение содержимого
Текстовые представленияЧисла в текстеШрифтыЦветаSF SymbolsПовторение — ценник5Состояние и кнопки
КнопкиСвойство @StateСостояние «истина или ложь»Условные представленияПовторение — счётчик очков6Ввод данных пользователем
Текстовое полеПереключательСчётчик и ползунокВыборПовторение — форма заказаПотренируйтесь самостоятельно: Песочница Swift