上下文闭包类型Response <anyobject> - &gt; void期望1个agrument但3个在封闭体中

时间:2016-09-12 08:05:07

标签: ios swift alamofire

此代码在iOS 8和swift 2.0上完全运行了我以前的项目。

这是我的代码:

let url=NSURL(string: _resourceURL)!

Alamofire.request(.GET ,url).responseJSON { (request : NSURLRequest?,response: NSHTTPURLResponse?, result: Result<AnyObject> ) -> void in
   print(result.value.debugDescription)
}

现在我尝试使用iOS 9,Swift 3.0,alamofire 4.0.0 但抛出以下错误:

  

通用类型'结果'专用于太少的类型参数(得到1,但预期为2)
  使用未声明类型'void'
  上下文闭包类型'响应 - &gt; Void'期望1个参数,但3个用于闭包体

2 个答案:

答案 0 :(得分:0)

如果您没有特定对象,则需要使用JSON进行转换,并且您很乐意按键访问属性,您可以这样做:

Alamofire.request(.GET, url).responseJSON { response in
    if let JSON = response.result.value {
        print("JSON: \(JSON)")
    }
}

答案 1 :(得分:0)

Alamofire的乐于助人的精灵写了一个简洁但不可或缺的migration guide,包括'之前/之后'式的代码片段。基于这些,您需要使用一些代码来处理AF 4.0:

  1. 将您的网址传递为String(AF扩展为符合其自己的URLConvertible协议),而不是NSURL。
  2. 切换URL和方法的顺序。 ...
  3. ... Swift 3切换到小写枚举(SE-006),因此该方法在AF 4+中为小写。 ...
  4. ...虽然我们处于此状态,.get是默认方法,因此我们可以完全放弃它。
  5. URLResponseURLRequest不再具有NS前缀。
  6. 切换到新的DataResponse类型,其中包含我们的朋友resultrequestresponse
  7. 所以工作代码可能如下所示:

        // resourceURL
    let url = "http://www.example.com/endpoint"
    
    Alamofire.request(url).responseJSON { dataResponse in
      guard 
        let request = dataResponse.request,
        let response = dataResponse.response
        else { fatalError("Don't ship me, debug me, master!") }
    
        print(dataResponse.result.value.debugDescription)
    

    这是在XCode 8GM中编译的,但是我还没有运行它(没有真正的终点),所以无论如何都是如此。