В sink на $query свойство query ещё содержит старый текст
final class SearchViewModel: ObservableObject {
@Published var query = ""
init() {
$query
.sink { [weak self] _ in
guard let self else { return }
self.analytics.log("search", text: self.query)
}
.store(in: &cancellables)
}
}
Пользователь набирает «чай». В аналитику приходят "", "ч", "ча". Почему текст отстаёт на одну букву?
- @Published публикует до записи — в willSet
- sink получает значения с задержкой в один кадр
- Слабая ссылка на self отдаёт старую копию
- analytics.log вызывается асинхронно
