TGViewer
Пепега Девелопмент Пепега Девелопмент @pepega_development · 203 subscribers
Post #11 549
Привет всем! ☕️

Давненько ничего не писал. Што ш - было и было. Начался WWDC 25, а у меня есть бесполезная привычка смотреть записи и тыкать палкой в новые фичи.

Не знаю, какой там рак на горе свитнул, но Эпплы сделали что-то реально прикольное и полезное - реализовали макрос Observable для UIKit'а 💪 ! Работает он для: контроллеров, вьюх и коллекций.

При обновлении модели у контроллера вызывается метод viewWillLayoutSubviews.

class SampleViewController: UIViewController {

@IBOutlet var counterLabel: UILabel!

private let counterModel = Counter()

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

counterLabel.text = "\(counterModel.value)"
}
}


В случае UIView вызовется layoutSubviews

class CounterView: UIView {

private let counterModel = Counter()
private let label = UILabel()

override init(frame: CGRect) { ... }

override func layoutSubviews() {
super.layoutSubviews()

label.text = "\(counterModel.value)"
}
}


Поддерживается вложенность. Внутренние классы придётся пометить макросом, структуры заработают сразу (что ожидаемо, так как те же Int'ы тоже структуры)

@Observable
class Counter {
var value: Int = 0
let innerModelClass = InnerModel()
var innerModelStruct = InnerModel2()
}

@Observable
class InnerModel {
var value: Int = 0
}

struct InnerModel2 {
var value: Int = 0
}


Бэкпорт до iOS 18 (скомпилируется и на iOS 17, лол), но нужно добавить флажок UIObservationTrackingEnabled = YES в info.plist.
Загрузить и потыкать компилирующиеся примеры можно здесь.
  • ❤ 18
  • 🔥 12
  • ⚡ 5
  • 🤡 1
More from @pepega_development
  1. Sep 25, 2026С пятницей 🎧
  2. Sep 24, 2026Дарова 🕺 ОпенАи недавно зарелизили очередные обновления моделей. Не собираюсь вдаваться в…
  3. Aug 19, 2026У меня есть привычка иногда просматривать логи работы нейронки. Полезно понимать, использу…
  4. Jul 31, 2026Большую часть времени я пользуюсь Opus High для решения задач. Стал замечать, что как будт…
  5. Jul 21, 2026Халоу, халоу! Чуть про харнесс аишный расскажу! 🥂 Харнесс – это, грубо говоря, тулинг вок…
  6. Jul 10, 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 →