Объедините два отдельных ответа RXSwift - PullRequest
2 голосов
/ 08 ноября 2019

У меня есть два значения Single, которые содержат массив одного и того же объекта. Я хочу объединить их и применить карту и вернуть их как один. Возможно ли это?

Итак, у меня есть это:

func fetchTripList(type: TripType) -> Single<[Trip]> {
    let response: Single<APITripListResponse> = request(target: TripsAPI.fetchUpcomingTripList)
    return response.map { $0.toModel() }
}

И мне нужно что-то вроде этого:

func fetchTripList(type: TripType) -> Single<[Trip]> {
    let responseUpcoming: Single<APITripListResponse> = request(target: TripsAPI.fetchUpcomingTripList)
    let responsePast: Single<APITripListResponse> = request(target: TripsAPI.fetchPastTripList)
    //'Declare a Singe variable <[Trip]> called X merge both responseUpcoming and responsePast, apply to them map { $0.toModel() } and return it'

    return X
}

Большое спасибо за помощь.

1 Ответ

3 голосов
/ 08 ноября 2019

Если вы считаете, что оператор merge именно то, что вам нужно, он будет ждать, пока вы не получите данные из обоих ваших запросов, а затем объединит их в один массив, который вы можете изменить с помощью map. И после этого вы можете преобразовать его в single.

Так это выглядит так:

Observable.merge(responseUpcoming.asObservable(), responsePast.asObservable()).map { $0.toModel() }.asSingle()
...