TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.64K subscribers
Post #226 1.27K
🔢 Observations: современный подход к отслеживанию изменений данных в Swift.

С выходом Swift 6.2 появился новый мощный инструмент для наблюдения за изменениями в @Observable моделях. Сейчас расскажу, как это работает и чем отличается от предыдущих подходов.


Что изменилось:

Раньше мы использовали withObservationTracking с его неудобным API и семантикой will set. Теперь появился объект Observations, который создает AsyncSequence для отслеживания изменений свойств.


Пример:

Допустим, у нас есть модель счетчика:


@Observable
class Counter {
var count = 0
var name = "Счетчик"
}


Старый подход:


class CounterObserver {
func observeOldWay(counter: Counter) {
withObservationTracking {
print("Текущее значение: \(counter.count)")
} onChange: {
self.observeOldWay(counter: counter) // Рекурсивный вызов
}
}
}


Новый подход:


class CounterObserver {
func observeNewWay(counter: Counter) {
Task { [weak self] in
let values = Observations { [weak self] in
guard let self else { return "" }
// Наблюдаем за count и name, но возвращаем форматированную строку
return "\(self.counter.name): \(self.counter.count)"
}

for await value in values {
print("Обновление: \(value)")
// Обновляем UI или выполняем другую логику
}
}
}
}


Еще один пример:


class UserProfileManager {
@Observable class UserProfile {
var username: String
var email: String
var isOnline: Bool
}

func startObservingProfile() {
Task { [weak self] in
let profileUpdates = Observations { [weak self] in
guard let self else { return false }
// Наблюдаем за несколькими свойствами
let status = self.userProfile.isOnline
let name = self.userProfile.username
return (status, name)
}

for await (isOnline, username) in profileUpdates {
await self?.updateUserInterface(isOnline: isOnline, username: username)
}
}
}
}



Преимущества нового подхода:

🔹 Более чистый код: никакой рекурсии.
🔹 AsyncSequence: интегрируется с современным асинхронным Swift.
🔹 Гибкость: можно возвращать любой тип данных.
🔹 Автоматическое отслеживание: наблюдаются все свойства, доступные в closure.


🔗 Ссылка на подробную статью


💡 Вывод:

Observations существенно упрощает отслеживание изменений данных по сравнению с предыдущими подходами. Теперь не нужно писать рекурсивные вызовы, достаточно создать асинхронную последовательность и обрабатывать обновления в цикле.

➡️ Подписаться на канал
Мобильный трудоголик
  • 👍 19
  • ❤ 9
  • 🔥 2
  • 👀 2
  • 🙏 1
More from @hardworkerit
  1. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  2. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  3. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  4. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  5. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  6. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →