Alamofire EmptyResponseCodes 不起作用

Posted

技术标签:

【中文标题】Alamofire EmptyResponseCodes 不起作用【英文标题】:Alamofire EmptyResponseCodes doesn't work 【发布时间】:2020-10-07 11:21:43 【问题描述】:

端点以代码 201 和空响应正文进行响应。查看 Alamofire 文档,只有 204 和 205 响应正文可以为空。有一个解决方案,我们可以指定带有空结果的状态码。 添加了一组

emptyResponseCodes: [200, 201, 202, 203, 204, 205]

发送请求后,我仍然收到错误!= nil 我在这里做错了什么?

responseDecodable(of: TResult.self,
                  decoder: self.jsonDecoder,
                  emptyResponseCodes: [200, 201, 202, 203, 204, 205],
                  completionHandler:  (response: DataResponse<TResult, AFError>) in
                                    
                                    if let error = response.error 
                                        taskCompletionSource.set(error: error)
                                     else if let result = response.value 
                                        taskCompletionSource.set(result: result)
                                     else 
                                        taskCompletionSource.set(result: EmptyCodable())
                                    

【问题讨论】:

【参考方案1】:

Alamofire 包含了一个 Empty 类型用于此目的,以及一个 EmptyResponse 协议,以便类型可以定义自己的空值。在我们包含的响应序列化程序中,我们检查是否允许空响应,如果允许,则尝试转换相关的空类型。

例如:

struct EmptyEntity: Codable, EmptyResponse 
    
    static func emptyValue() -> EmptyEntity 
        return EmptyEntity.init()
    

【讨论】:

你救了我。对于组合用户,您的返回发布者:-> AnyPublisher

以上是关于Alamofire EmptyResponseCodes 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputData

出现错误:使用 Alamofire.playground 时没有这样的模块“Alamofire”

var 请求:Alamofire.Request?使用未声明类型的 Alamofire

值:(failure(Alamofire.AFError.explicitlyCancelled)) 使用 Alamofire 发布者时

使用方案 Alamofire watchOS 构建工作区 Alamofire 失败

iOS开发之Alamofire源码深度解析