Swift 2 NSURLSession.sharedSession().dataTaskWithURL 无法使用类型的参数列表调用
Swift 2 NSURLSession.sharedSession().dataTaskWithURL Cannot invoke with an argument list of type
似乎无法使用 Xcode 7 编译以下代码,我收到错误 "Cannot invoke 'dataTaskWithURL' with an argument list of type"
看起来 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/fdsfsdfds/fdsfsdfds/AppDelegate.swift:24:28:
Cannot invoke 'dataTaskWithURL' with an argument list of type '(NSURL,
(_, _, _) throws -> 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 中错误处理的更多信息,请参阅可用的预发布文档 here
从 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
}
let url : String = String(format: "http://api.nytimes.com/svc/news/v3/content/nyt/all/720.json?api-key=%@",apiKey)
let url1: NSURL = NSURL(string: url)!
let session = NSURLSession.sharedSession()
let task1 = session.dataTaskWithURL(url1, completionHandler: {
(data, response, error) -> Void in
do {
if data == nil {
return
}
else
{
let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary
self.dict = jsonData;
self.array1 = (self.dict.objectForKey("results") as? NSMutableArray)!
dispatch_async(dispatch_get_main_queue()) {
self.table.reloadData()
}
}
} catch {
}
})
似乎无法使用 Xcode 7 编译以下代码,我收到错误 "Cannot invoke 'dataTaskWithURL' with an argument list of type"
看起来 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/fdsfsdfds/fdsfsdfds/AppDelegate.swift:24:28: Cannot invoke 'dataTaskWithURL' with an argument list of type '(NSURL, (_, _, _) throws -> 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 中错误处理的更多信息,请参阅可用的预发布文档 here
从 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
}
let url : String = String(format: "http://api.nytimes.com/svc/news/v3/content/nyt/all/720.json?api-key=%@",apiKey)
let url1: NSURL = NSURL(string: url)!
let session = NSURLSession.sharedSession()
let task1 = session.dataTaskWithURL(url1, completionHandler: {
(data, response, error) -> Void in
do {
if data == nil {
return
}
else
{
let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary
self.dict = jsonData;
self.array1 = (self.dict.objectForKey("results") as? NSMutableArray)!
dispatch_async(dispatch_get_main_queue()) {
self.table.reloadData()
}
}
} catch {
}
})