Наблюдаемые объекты
Часть раздела Введение в SwiftUI путешествия по Swift на Coddy. Урок 40 из 50.
Данные, которыми делятся несколько представлений или у которых есть собственная логика, помещаются в класс. Он соответствует ObservableObject, а каждое свойство, отображаемое на экране, помечается как @Published:
class Cart: ObservableObject {
@Published var count = 0
func add() {
count += 1
}
}Представление, которое создаёт объект, хранит его с помощью @StateObject. SwiftUI поддерживает жизнь этого единственного объекта, пока представление находится на экране, и перерисовывает представление всякий раз, когда опубликованное свойство изменяется:
struct ContentView: View {
@StateObject private var cart = Cart()
var body: some View {
VStack {
Text("Items: \(cart.count)")
Button("Add to cart") {
cart.add()
}
}
}
}Дочернее представление, которое получает существующий объект от родительского представления, вместо этого помечает его как @ObservedObject: оно наблюдает за объектом, но не владеет им.
Задание
СреднеКласс Scoreboard не связан с экраном. Сделайте его ObservableObject с @Published свойством points, сохраните его в ContentView с помощью @StateObject и сделайте так, чтобы кнопка вызывала scoreboard.score(). После одного нажатия текст должен отображать Points: 10.
Попробуйте сами
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в SwiftUI
10Проект — Coddy Coffee
Обзор проектаЭкраны напитков2Отображение содержимого
Текстовые представленияЧисла в текстеШрифтыЦветаSF SymbolsПовторение — ценник5Состояние и кнопки
КнопкиСвойство @StateСостояние «истина или ложь»Условные представленияПовторение — счётчик очков6Ввод данных пользователем
Текстовое полеПереключательСчётчик и ползунокВыборПовторение — форма заказаПотренируйтесь самостоятельно: Песочница Swift