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

Две подписки на один издатель профиля дают два одинаковых запроса

let profile = URLSession.shared.dataTaskPublisher(for: profileURL)
    .map(\.data)
    .decode(type: Profile.self, decoder: JSONDecoder())

profile.map(\.name).replaceError(with: "").sink { nameLabel.text = $0 }.store(in: &bag)
profile.map(\.avatarURL).replaceError(with: nil).sink { loadAvatar($0) }.store(in: &bag)

В сетевом логе — два запроса GET /profile подряд. Как сделать один запрос на обе подписки?

  • Добавить .share() в конец общей цепочки
  • Сохранить издатель в let — он уже общий
  • Добавить .receive(on: DispatchQueue.main)
  • Заменить sink на assign для обеих

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

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

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

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