代码报错:无法将AnyPublisher转换为目标类型的问题求助
问题分析
你当前的代码错误核心在于**map操作符的使用场景不对**:
getAccessToken()返回的是AnyPublisher<MyAppointmentsAPIAccessTokenDetails, Error>- 在
map闭包里调用provider.getAllMyAppointments(with: tokenDetails),返回的是另一个AnyPublisher<[TelehealthMyAppointmentsListEntity]?, Error> - 但
map要求闭包直接返回最终的输出值(也就是[TelehealthMyAppointmentsListEntity]?),而不是一个新的Publisher,这就导致了类型不匹配的错误。
修正方案
把map替换成**flatMap**操作符,它专门用来处理“返回Publisher的闭包”,会自动将嵌套的Publisher扁平化,最终输出正确的类型:
public func getAllMyAppointments() -> AnyPublisher<[TelehealthMyAppointmentsListEntity]?, Error> { telehealthMyAppointmentsAPIAccessTokenUseCase.getAccessToken() .flatMap { tokenDetails in provider.getAllMyAppointments(with: tokenDetails) } .eraseToAnyPublisher() }
补充说明
map:用于同步转换上游Publisher的输出值,闭包返回的是具体值,不是PublisherflatMap:用于异步转换,闭包返回的是新的Publisher,它会订阅这个新的Publisher,并将其输出作为自己的输出传递下去
内容的提问来源于stack exchange,提问作者mars_dev
相关产品推荐
相关产品推荐

