Как архивировать вызовы API в одном издателе с помощью Swift Combine - PullRequest
0 голосов
/ 22 апреля 2020

Я начал использовать 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, чтобы запустить этих двух издателей и работать с данными, когда они оба закончат?

...