Observations: @Observable как AsyncSequence 🫡
⚡️ SE-0475 превращает чтение свойств в асинхронную последовательность значений. Реактивность там, где SwiftUI нет: сервисы, акторы, аналитика. let values = Observations { score.points } — замыкание перезапускается, когда меняется что угодно, что оно прочитало. Дальше обычный for await.
⚠️ Три вещи, которые обычно описывают неправильно: Замыкание не выполняется в момент создания. Оно лениво срабатывает на первом next(), чтобы «прогреть» последовательность. Так что первый элемент — это значение на момент начала итерации, а не на момент создания. Это транзакционно: изменения до следующей точки приостановки схлопываются в один элемент. Поменяли два свойства подряд — получите одно событие, а не два.
Промежуточные значения могут теряться. Это не буферизованный лог изменений, полагаться на него как на историю нельзя. Доступно с iOS 26 / macOS 26, import Observation.
· 5 ч
для аналитики, которую ты упоминаешь, одного observations мало — раз промежуточные значения схлопываются, проще логировать мутацию прямо в сеттере или кидать в append-only буфер на стороне актора. иначе через месяц будешь дебажить «а почему метрика прыгнула с 3 сразу на 7» и гадать, это баг или фича транзакционности
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответить
0
коммент удалён