Вступить в клуб →
средняявопросCombine: издатели, подписки и операторы

В 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 вызывается асинхронно

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела