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?
}