Alamofire对responseJSON的响应的具体类型是什么?

时间:2016-10-21 18:34:03

标签: swift alamofire

(Swift 2.2,Alamofire 3.0)

我有一个相当复杂的错误/状态检查协议,我在许多REST调用后应用,我自然希望重用这段代码。

Alamofire.request(.POST, "some/rest/url", params, encoding:.JSON)
        .validate()
        .responseJSON { response in
             // This is what I'd like to do
             self.myAwesomeMethod(response)

我的问题是声明myAwesomeMethod,并根据我尝试使用的内容,生成switch语句中的常量。

当然,只是在responseJSON关闭期间工作,一切都很糟糕:

switch response.result {
            case .Failure(let error):
                handleGracefully(error)
                return
            case .Success:
                // 4. Profit
            }

但是当我尝试将该开关块移动到myAwesomeMethod时,我会被绊倒几个方向。我似乎找不到result的正确声明,而且在我的案例中,我无法弄清楚.Failure.Success的显式枚举。

我知道我们已经交了一个4元组,并且我在尝试通过源代码后试图通过多种方式宣布它。这是我的最新消息:

private func myAwesomeMethod(
    afResponse: (_, 
                 response: NSHTTPURLResponse?, 
                 result: Result<Value, Error>?,
                 error: NSError?)) {

         switch afResponse.result {
    case .Failure(let error):
        beGraceful(error)
        return
    case .Success:
        // 4. Profit
    }
    ...

然而,Value中的Result<Value, Error>让我知道了这一点:

  

使用未声明类型&#39;值&#39;

但是.Failure.Success不再处于闭包的上下文中,它们在结果中定义,因此任何其他声明都导致无法访问它们。

我试过拆开组成部分,但这对我来说并没有真正改变问题。我一直在使用myAwesomeMethod进行.responseJSON来电,所以我希望我可以使用某种类型Value来保存我。

有没有人有任何想法?

修复了@Jon Schier正确方向的推动

辅助函数的声明非常简单。我实际需要的只是以下内容:

private func myAwesomeMethod(afResponse: Response<AnyValue, NSError>)

之后,一切似乎都很开心。

1 个答案:

答案 0 :(得分:1)

responseJSON的实施将为您回答这个问题。这是Result<AnyObject, NSError>