Egor Mezhin
Ссылка
нажмите — покажем
нажмите — покажем
😏 Хочу разобрать статью про переход на Observation в SwiftUI и напомнить, зачем вообще появился этот механизм и чем он отличается от привычного ObservableObject.
Тема не новая, но на практике до неё доходят не сразу, особенно если в проекте уже есть устоявшийся подход к работе с состоянием.
🔹 Начиная с iOS 17 в SwiftUI доступен фреймворк Observation, который позволяет отслеживать изменения состояния без использования ObservableObject, @Published и Combine.
Основная идея – упростить работу с состоянием и сократить шаблонный код.
🔹 Классический подход с ObservableObject работает, но имеет свои особенности:
• необходимость явно помечать свойства как @Published
• дополнительный синтаксический шум
• риск забыть опубликовать изменения
• привязка к Combine даже в простых сценариях
Observation предлагает более прямой способ описывать наблюдаемое состояние.
🔹 На уровне кода вместо ObservableObject используется атрибут @Observable.
Старый подход:
class Counter: ObservableObject {
@Published var value = 0
}
С Observation:
@Observable
class Counter {
var value = 0
}
🔹 Преимущества такого подхода:
• Нет необходимости писать @Published, objectWillChange и вспомогательные конструкции.
• Меньше риска ошибок, связанных с ручным управлением публикацией изменений.
• Логика наблюдения находится ближе к самой модели.
Пример использования:
@Observable
class TimerModel {
var time: Int = 0
func tick() {
time += 1
}
}
Использование во View:
struct TimerView: View {
@State private var model = TimerModel()
var body: some View {
Text("Time: \(model.time)")
}
}
SwiftUI отслеживает изменения time и обновляет View без дополнительной настройки.
🔹 Где Observation особенно уместен:
• простые ViewModel и модели состояния
• логика, не требующая Combine
• случаи, где ObservableObject использовался только ради обновления UI
Следующие механизмы продолжают работать как раньше:
• @State
• @Binding
• @EnvironmentObject
Observation не заменяет их, а дополняет.
🍕 Observation упрощает работу с состоянием в SwiftUI за счёт уменьшения шаблонного кода и более прямого описания наблюдаемых моделей. Для новых экранов и при постепенном рефакторинге старых ObservableObject это часто более удобный и читаемый вариант.
#R #SwiftUI #Observation
9 · 270 ·