Я начал использовать Combine и столкнулся с вопросом, как получить обратные вызовы запроса API в Zip.
, например. У меня есть два издателя:
a для извлечения контента:
func fetchContent() {
contentList = []
let contentPublisher = try? getContentList()
let decoder = JSONDecoder()
let cancellable = contentPublisher?
.receive(on: DispatchQueue.main)
.map {
$0.data
}
.decode(type: API.ContentList.get().decodeType, decoder: decoder)
.sink(
receiveCompletion: { completion in
switch completion {
case .failure(let error):
case .finished:
}
}, receiveValue: { data in
self.contentList = data
})
.store(in: &cancellableSet)
}
func fetchMenu() {
let menuListPublisher = try? getMenuList()
let decoder = JSONDecoder()
let cancellable = menuListPublisher?
.receive(on: DispatchQueue.main)
.map {
$0.data
}
.decode(type: API.Menu.get().decodeType, decoder: decoder)
.sink(
receiveCompletion: { completion in
switch completion {
case .failure(let error):
print("Error:")
print(error)
case .finished:
print("DONE - postUserPublisher")
self.isMenuSynced = true
}
}, receiveValue: { data in
self.menuList = data
})
.store(in: &cancellableSet)
}
Для контента и меню существует два типа декодирования. как я могу использовать Publishers.Zip, чтобы запустить этих двух издателей и работать с данными, когда они оба закончат?