【发布时间】:2021-10-15 08:31:57
【问题描述】:
我很难完全理解Combine。这里有一个问题,我似乎无法返回正确的输出类型。
我该怎么做?
func test(ticketId: String) -> AnyPublisher<Void, Error> {
campaignByTicketIdUseCase.execute(ticketId: ticketId) // this is AnyPublisher<Campaign,Error>
.flatMap { (campaign) -> AnyPublisher<Void, Error> in // this is where the error is thrown
guard let url = URL(string: "url"),
validator.isParticipationValid(campaignIdentifier: campaign.identifier) else {
return Result<Void, Error>.failure(HttpError()).publisher.eraseToAnyPublisher()
}
var request = URLRequest(url: url)
request.httpMethod = "POST"
return AuthSession.shared.doRequest(request: request)
.tryMap({ (_: Data, response: URLResponse) -> Void in
if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode != 200 {
throw HttpError()
}
}).eraseToAnyPublisher()
}
}
【问题讨论】:
-
如果不出意外,您将返回
campaignByTicketIdUseCase.execute(...).flatMap { ... },并且似乎缺少.eraseToAnyPublisher()。
标签: swift reactive-programming combine