如何使用Alamofire和Combine处理空响应?

5 ios swift alamofire combine

我正在发出一个帖子请求,但回复为空

AF.request(URL(string: "some url")!, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil)
    .validate()
    .publishDecodable(type: T.self)
    .value()
    .eraseToAnyPublisher()
Run Code Online (Sandbox Code Playgroud)

其中 T 是

struct EmptyResponse: Codable {}

我遇到此错误“响应无法序列化,输入数据为零或零长度。” 如何使用 Alamofire 和 Combine 处理带有空响应的发布请求?

Jon*_*ier 19

当您的后端未返回任何数据但未返回适当的 HTTP 响应代码(204 或 205)时,会发生此错误。如果这是您后端的预期行为,您可以在设置发布者时将响应代码添加到可接受的空响应代码列表中:.publishDecodable(T.self, emptyResponseCodes: [200]。这还要求T要么符合 Alamofire 的EmptyResponse协议,要么您期望 Alamofire 的Empty类型作为响应。


Luk*_*z D 5

在其他地方找到答案,但在这里很有用。像这样制作空对象:

struct EmptyEntity: Codable, EmptyResponse {
    
    static func emptyValue() -> EmptyEntity {
        return EmptyEntity.init()
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样返回发布者:

-> AnyPublisher<EmptyEntity, AFError>
Run Code Online (Sandbox Code Playgroud)