TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #94 972
🔢 Автоматическое отслеживание изменений с помощью @Observable: магия SwiftUI теперь доступна в UIKit.

С iOS 18 и macOS 15 UIKit получил скрытую фичу, которая меняет правила игры — автоматическое отслеживание изменений данных через @Observable. Больше не нужны ручные вызовы setNeedsLayout() — интерфейс теперь обновляется сам!

🤔 Как это работает?

Помечаем модель макросом @Observable:

import Observation

@Observable
class User {
var name = "Иван"
var unreadMessages = 0
}


Читаем данные в стандартных методах ViewController:

class ProfileVC: UIViewController {
let user = User()

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

// UIKit автоматически отследит эти изменения
nameLabel.text = user.name
messagesCountLabel.text = "\(user.unreadMessages)"
}
}


Изменяем данные — интерфейс обновится автоматически:

@objc func buttonDidTap() {
// Значение messagesCountLabel обновится автоматически
user.unreadMessages += 1
}


Включаем отслеживание @Observable в Info.plist:

<key>UIObservationTrackingEnabled</key>
<true/>


В iOS 26 это работает из коробки без настройки.

⚠️ Важные нюансы:
🔸 Автоматическое отслеживание изменений работает в viewWillLayoutSubviews(), layoutSubviews() и новом методе updateProperties(), который вызывается перед layoutSubviews для оптимизации.
🔸 Обновление интерфейса после обновления данных возможно только в main thread.
🔸 Важно не забывать про retain cycles, при работе с @Observable.
🔸 Рекомендуется избегать обновление данных без необходимости, так как частое обновление интерфейса может сказаться на производительности приложения.

💡 Вывод:
Теперь UIKit умеет так же удобно обновлять интерфейс, как SwiftUI. Главное — правильно использовать @Observable и не забывать про потокобезопасность.

➡️ Подписаться на канал
Мобильный трудоголик
  • 👍 22
  • ❤ 9
  • 🔥 3
More from @hardworkerit
  1. Oct 10, 2026🔢 Переиспользуемые превью в SwiftUI. SwiftUI-превью часто начинаются с простого кода. Но…
  2. Oct 9, 2026👨‍💻 Умение адаптироваться - важный навык айтишника, который часто недооценивают. В ИТ не…
  3. Oct 8, 2026🈸 Apple обяжет разработчиков поддерживать iPhone Duo. Apple опубликовала требования к при…
  4. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  5. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  6. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
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 →