Swift 如何在联合收割机中使用flatMap?

Swift 如何在联合收割机中使用flatMap?,swift,generics,combine,Swift,Generics,Combine,我正在编写一个AppCore,是一个框架,它的主要任务是做网络请求。 当我编码一个新端点时,我实现如下: func getPerson(id: Int) -> AnyPublisher<Person?, Error> { let model = Model(id: id) //Endpoint contains a url, params, http method, etc etc let endpoint = Endpoint.getPerson(requestM

我正在编写一个
AppCore
,是一个框架,它的主要任务是做网络请求。 当我编码一个新端点时,我实现如下:

func getPerson(id: Int) -> AnyPublisher<Person?, Error> {
  let model = Model(id: id)
  //Endpoint contains a url, params, http method, etc etc
  let endpoint = Endpoint.getPerson(requestModel: model)
  let request: AnyPublisher<NetworkCoreData<PersonResponseModel>, Error> = service.request(target: endpoint)
  
    
  return request.flatMap { (response) -> AnyPublisher<Person?, Error> in
     //in this line response has a codable struct: PersonResponseModel, I want to use flatMap to convert PersonResponseModel to Person
  }
}
如果您想知道什么是
service.request
是执行请求的协议:

public protocol NetworkService {
    func request<T: Decodable>(target: NetworkTargetType) -> AnyPublisher<T, Error>
}

这就是为什么我不能使用
flatMap

似乎你只需要在最后添加
eraseToAnyPublisher
public protocol NetworkService {
    func request<T: Decodable>(target: NetworkTargetType) -> AnyPublisher<T, Error>
}
public struct NetworkCoreData<T: Decodable>: Decodable {
   public let data: T?
}