Две подписки на один издатель профиля дают два одинаковых запроса
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 для обеих
