如何最好地修改来自 Alamofire 上的 -validate 方法的错误消息

Posted

技术标签:

【中文标题】如何最好地修改来自 Alamofire 上的 -validate 方法的错误消息【英文标题】:How to best modify error messages from -validate method on Alamofire 【发布时间】:2015-10-30 00:08:55 【问题描述】:

我有一个小 sn-p,它向登录端点发出请求,它工作正常。

public func loginWithEmail(email: String, password: String, completionHandler: Result<String, NSError> -> Void) 
    Alamofire.request(AuthenticationRouter.Login(email: email, password: password))
        .validate()
        .responseString  response in
            completionHandler(response.result)
    

我的问题是:当用户输入无效凭据时,服务器返回 403,由于 validate 将生成 Result&lt;NSError&gt;。修改此错误中的错误描述/失败原因的最佳方法是什么?

我应该创建自己的错误吗?有没有办法为所有请求修改它?

Alamofire validate func sn-p 供参考:

public func validate<S: SequenceType where S.Generator.Element == Int>(statusCode acceptableStatusCode: S) -> Self 
    return validate  _, response in
        if acceptableStatusCode.contains(response.statusCode) 
            return .Success
         else 
            let failureReason = "Response status code was unacceptable: \(response.statusCode)"
            return .Failure(Error.errorWithCode(.StatusCodeValidationFailed, failureReason: failureReason))
        
    

【问题讨论】:

【参考方案1】:

最简单的方法是在错误到达您的应用代码后对其采取行动。您可能不想创建覆盖默认 Alamofire 行为的自定义 validate 方法,因为您的案例非常具体。

通常,您会设置可接受的状态代码并使用validate(statusCodes:) 方法。然后在您的应用程序代码中的response 逻辑中,打开错误并为每种情况创建自定义应用程序表示。在这种情况下,403 表示使用了错误的凭据,只有您的应用程序知道。因此,它应该存在于您的应用程序代码中,而不是 Alamofire validation 扩展中。我的两分钱...

【讨论】:

以上是关于如何最好地修改来自 Alamofire 上的 -validate 方法的错误消息的主要内容,如果未能解决你的问题,请参考以下文章

来自 App Engine 的 Google Cloud SQL 的连接限制是啥,以及如何最好地重用数据库连接?

如何在 Relay Modern 的父组件中最好地访问来自 QueryRenderer 的数据?

如何使用来自 Alamofire 发布请求的 SwiftyJSON 填充下拉列表?

如何检查网络响应来自 Alamofire 请求中的缓存或服务器?

如何使用来自 Alamofire 的 JSON 数据填充 tableview?

如何显示来自 Alamofire 请求的 JSON 数组响应的某些部分