我是Swift Combine的新手,所以遇到一个小问题
我正在尝试调用两个api调用,并合并结果,因为第二个API调用取决于第一次调用的结果。
这是代码
return self.gameRepository.fetchGames(forUser: user.id)
.map { games -> AnyPublisher<[Game], ApiError> in
let result = games.map { gameDto -> Game in
let location = self.venueRepository.fetch(by: gameDto.siteId)
.map { $0.mapToModel() }
let game = gameDto.mapToModel(location: location)
return game
}
我的错误出现在第4行“让位置”上,当我尝试将此传递给 第5行
game.mapToModel(location: location)
无法将“ AnyPublisher”类型的值转换为预期的参数类型“位置”
从存储库中获取呼叫签名如下:
func fetch(by id: String) -> AnyPublisher<LocationDto, ApiError>
这是正确的,但是我在结果中使用的.map调用允许
$0.mapToModel()
发生,所以我有locationDto对象,可以将其强制转换为Domain模型。
任何有关如何将这两个api一起调用的帮助将不胜感激。
答案 0 :(得分:0)
而不是第一个地图运算符,请尝试使用flatMap并从带有您模型的.flatmap AnyPublisher返回,该模型需要传递给另一个请求。伪代码:
fetchGames -> AnyPublisher<[Game]> // First request
fetchGame(by id: String) -> AnyPublisher<LocationDto> // Second request that depends on model from first one
fetchGames.flatMap { fetchGame(by: $0.id) }