Swift2 Swift 2 NSURLSession.sharedSession().dataTaskWithURL无法使用类型为的参数列表调用

Swift2 Swift 2 NSURLSession.sharedSession().dataTaskWithURL无法使用类型为的参数列表调用,swift2,xcode7,Swift2,Xcode7,似乎无法使用Xcode 7编译以下代码,出现错误“无法使用类型为的参数列表调用'dataTaskWithURL'” 看起来completionHandler不再是可选的,无法确定如何重写以下代码。谢谢你的帮助 let session = NSURLSession.sharedSession() let url = NSURL(string: urlString) var task = session.dataTaskWithURL(url!) { (da

似乎无法使用Xcode 7编译以下代码,出现错误“无法使用类型为的参数列表调用'dataTaskWithURL'”

看起来completionHandler不再是可选的,无法确定如何重写以下代码。谢谢你的帮助

    let session = NSURLSession.sharedSession()
    let url = NSURL(string: urlString)

    var task = session.dataTaskWithURL(url!) {
        (data, response, error) -> Void in

        if error != nil {
            print(error!.localizedDescription)
        }
        else {
            var error: NSError?

            var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
            // Do Stuff
        }
    }

    task!.resume()

编译器正在抛出以下错误:

/Users/Xcode/Desktop/fds/fds/AppDelegate.swift:24:28: 无法使用类型为“(NSURL, (,,)抛出->Void)'

在completionHandler中,您没有捕获到
JSONObjectWithData
最终可能引发的异常。因此,编译器推断您正在尝试传播异常,这将要求completionHandler具有以下签名:

(NSData?, NSURLResponse?, NSError?) throws -> Void
这与预期的实际completionHandler
dataTaskWithURL
不匹配,因此出现错误

要解决此问题,只需将调用包装到
NSJSONSerialization即可。JSONObjectWithData
是一个do/catch语句,用于处理错误:

do {
    var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
    // Do Stuff

} catch {
    // handle error
}

有关Swift2中错误处理的更多信息,请参阅可用的预发布文档。编译器抛出以下错误:

/Users/Xcode/Desktop/fds/fds/AppDelegate.swift:24:28: 无法使用类型为“(NSURL, (,,)抛出->Void)'

在completionHandler中,您没有捕获到
JSONObjectWithData
最终可能引发的异常。因此,编译器推断您正在尝试传播异常,这将要求completionHandler具有以下签名:

(NSData?, NSURLResponse?, NSError?) throws -> Void
这与预期的实际completionHandler
dataTaskWithURL
不匹配,因此出现错误

要解决此问题,只需将调用包装到
NSJSONSerialization即可。JSONObjectWithData
是一个do/catch语句,用于处理错误:

do {
    var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
    // Do Stuff

} catch {
    // handle error
}
有关Swift2中错误处理的更多信息,请参阅自Swift2.0(Xcode 7 beta 6)起提供的预发布文档,使用以下方式使用数据任务WithURL():

var task = session.dataTaskWithURL(url!, completionHandler: {
   (data, response, error) -> Void in

   :
})
task.resume()
要在完成处理程序中使用
NSJSONSerialization.JSONObjectWithData
,还需要捕获错误:

    do {
        var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
        // Do Stuff
    } catch {
        // handle error
    }
从Swift 2.0(Xcode 7 beta 6)开始,使用
dataTaskWithURL()
如下:

var task = session.dataTaskWithURL(url!, completionHandler: {
   (data, response, error) -> Void in

   :
})
task.resume()
要在完成处理程序中使用
NSJSONSerialization.JSONObjectWithData
,还需要捕获错误:

    do {
        var jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
        // Do Stuff
    } catch {
        // handle error
    }

更新了一些解释问题原因的附加信息。我添加了throws和do{try}catch{},但仍然提示错误“无法使用类型为“(NSURL,(,,,)throws->Void)”的参数列表调用'dataTaskWithURL'”-[Xcode 7 beta2]更新了一些解释问题原因的附加信息。我添加了throws和do{try}catch{},但仍然提示错误“无法使用类型为“(NSURL,(,,,)throws->Void)”的参数列表调用'dataTaskWithURL'”[Xcode 7 beta2]这篇文章也帮助了我,这篇文章也帮助了我,请在回答中解释你的代码。所以,任何人都能理解你到目前为止所做的事情。请在回答中解释你的代码。所以,任何人都能理解你到目前为止所做的事情。