Ответ
ObservableObject — это протокол в SwiftUI, который позволяет классу (обычно модели данных или сервису) стать наблюдаемым источником данных для обновления пользовательского интерфейса.
Ключевой принцип:
Класс, соответствующий ObservableObject, может объявлять свои свойства с оберткой @Published. При изменении такого свойства SwiftUI автоматически получает уведомление и перерисовывает все представления (View), которые зависят от этого объекта.
Пример базового использования:
import Combine // Для ObservableObject
import SwiftUI
// 1. Создаем класс, реализующий протокол
class UserSettings: ObservableObject {
// 2. Помечаем публикуемые свойства
@Published var username = "Гость"
@Published var score = 0
}
// 3. Используем в View
struct ContentView: View {
// 4. Создаем или получаем экземпляр наблюдаемого объекта
@StateObject private var settings = UserSettings()
var body: some View {
VStack {
Text("Привет, (settings.username)!")
Button("Увеличить счет") {
settings.score += 1 // Изменение @Published свойства обновит View
}
Text("Счет: (settings.score)")
}
}
}
Зачем это нужно?
- Разделение ответственности: Модель данных (
ObservableObject) отделена от представления (View). - Автоматическое обновление UI: Нет необходимости вручную вызывать
objectWillChange.send()для свойств, помеченных@Published. - Интеграция с фреймворком: SwiftUI эффективно управляет подписками и обновлениями.
Важно: ObservableObject — это протокол, который реализует класс. Для хранения экземпляра этого класса во View используются обертки @StateObject, @ObservedObject или @EnvironmentObject.