Объединение запросов в объединение - PullRequest
0 голосов
/ 05 мая 2020

Боюсь объединить два запроса. Мне нужно id из первого, затем начните второй с этого первого id из полученного списка. Я не могу найти хорошего решения для этого с помощью Swift Combine.

мой первый запрос выглядит так CarSerview.shared.getCategories() -> AnyPublisher<[Category], CarError>:

 private func getCategories() {
    CarSerview.shared.getCategories()
        .receive(on: DispatchQueue.main)
        .map { car in
           return car.id
        }
        .replaceError(with: [])
        .assign(to: \.carsIds, on: self)
        .store(in: &cancellable)
}

, а второй выглядит так CarSerview.shared.getCar() -> AnyPublisher<Car, CarError>:

private func getCar(_ category: CategoryObject) {
    SPService.shared.getExcursions(category)
        .receive(on: DispatchQueue.main)
        .map { car in
            return car.cars.compactMap { $0.name }
        }
    .sink(receiveCompletion: { error in
        print(error)
    }, receiveValue: { [weak self] result in
        self?.cars = result
    })
}

как можно связать это два запроса в одном?

1 Ответ

0 голосов
/ 05 мая 2020

Невозможно проверить, но идея состоит в том, чтобы использовать .map + .switchToLatest, поэтому может выглядеть следующим образом

private func getCars() {
    CarSerview.shared.getCategories()
        .map { car in
            return SPService.shared.getExcursions(car.id)
        }
    .switchToLatest()
    .receive(on: DispatchQueue.main)
    .map { car in
         return car.cars.compactMap { $0.name }
    }
    .sink(receiveCompletion: { error in
        print(error)
    }, receiveValue: { [weak self] result in
        self?.cars = result
    })
}
...