迅速捕捉错误

时间:2016-03-27 18:42:45

标签: swift

为什么

            if error = response.result.error else {
                print (error)
            }

不允许并在下面的函数中抛出错误?我原以为它应该会很顺利。

    Alamofire.request(Router.RegisterUser(parameters))
        .validate()
        .responseJSON(completionHandler: { (response) -> Void in

            if let receivedData = response.result.value {
                let json = JSON(receivedData)

                // Check for error in JSON
                if let message = json["error"]["message"].string {
                    let error = Error.errorWithCode(.DataSerializationFailed, failureReason: message)
                    print(error)
                    return
                }
                completionHandler(.Success(true), response: JSON(receivedData))
            }

            if error = response.result.error else {
                print (error)
            }
    })

当服务器确实返回错误代码时,我使用validate函数来避免对completionhandler的成功响应。现在的问题是,我目前唯一可以收到的错误是由validate()引发的错误。但我也在我的API中使用错误处理,并会向用户返回一个合适的错误消息。

  

错误Domain = com.alamofire.error Code = -6003"响应状态代码为   不可接受的:400" UserInfo = {NSLocalizedFailureReason =响应状态   代码是不可接受的:400}

我现在如何实现这一目标?通过使用验证,根据我的理解,响应永远不会被处理?

    Alamofire.request(Router.RegisterUser(parameters))
        .validate()
        .responseJSON(completionHandler: { (response) -> Void in
            switch(response.result) {
            case .Success(let response):
                print(response)
            case .Failure(let error):
                print("FAILURE: \(error)")
            }
         })
     }

1 个答案:

答案 0 :(得分:0)

您的代码中似乎存在两个问题:

  1. 您错过了letguard来检查是否有错误。

  2. print(error)应该在里面,如果您正在检查错误不是nil并尝试在其他地方打印错误,那将是零。