Swift 2 try/catch
Swift 2 try/catch
我已经开始将我的一个项目转换为 Swift 2 并且我 运行 进入了这个问题。下面开始这个块是完全有效的 try
/catch
,实际上它是由 Xcode 迁移工具生成的。
do {
requestData = try NSJSONSerialization.dataWithJSONObject(requestContents, options: [])
} catch var error as NSError {
requestError = error
requestData = nil
}
如果我在闭包中使用相同的代码,例如 dataTaskWithRequest
,我会得到一个错误。错误是在任务分配中,但它是导致错误的原因。以下也有效,但我没有捕捉到错误。
let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, taskError) -> Void in
if taskError != nil {
NSLog("Error making request: " + taskError!.localizedDescription)
}
else {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
if let parseJSON = json as NSDictionary? {
// do some parsing here
}
}
catch {
NSLog("Error in JSON serialization")
}
}
})
task.resume()
但是如果我尝试使用以下方法捕获错误:
} catch let e as NSError {
我收到这个错误:
Invalid conversion from throwing function of type '(_, _, _) throws ->
Void' to non-throwing function type '(NSData?, NSURLResponse?,
NSError?) -> Void'
我确实发现:
} catch _ {
有效,但对我有很多好处。
我是不是遗漏了什么或者我应该提交错误?
(这是Xcode 7b5)
dataTaskWithRequest
的完成处理程序不是为了抛出像 NSJSONSerialization
的 JSONObjectWithData
那样的错误,其签名是:
class func JSONObjectWithData(data: NSData, options opt: NSJSONReadingOptions) throws -> AnyObject
执行以下操作(与您尝试的相同):
catch _
但这不会向我们提供有关抛出错误的任何详细信息,即 class func JSONObjectWithData
.
因此,我们需要一种方法来消耗不可抛出的 dataTaskWithRequest
,同时保留抛出的 - JSONObjectWithData
.
我试过以下方法:
catch let error as NSError
{
//error specific to JSON serialization
NSLog("Error in JSON serialization \(error)")
}
catch
{
//exhaust the error
NSLog("Some error")
}
我已经开始将我的一个项目转换为 Swift 2 并且我 运行 进入了这个问题。下面开始这个块是完全有效的 try
/catch
,实际上它是由 Xcode 迁移工具生成的。
do {
requestData = try NSJSONSerialization.dataWithJSONObject(requestContents, options: [])
} catch var error as NSError {
requestError = error
requestData = nil
}
如果我在闭包中使用相同的代码,例如 dataTaskWithRequest
,我会得到一个错误。错误是在任务分配中,但它是导致错误的原因。以下也有效,但我没有捕捉到错误。
let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, taskError) -> Void in
if taskError != nil {
NSLog("Error making request: " + taskError!.localizedDescription)
}
else {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
if let parseJSON = json as NSDictionary? {
// do some parsing here
}
}
catch {
NSLog("Error in JSON serialization")
}
}
})
task.resume()
但是如果我尝试使用以下方法捕获错误:
} catch let e as NSError {
我收到这个错误:
Invalid conversion from throwing function of type '(_, _, _) throws -> Void' to non-throwing function type '(NSData?, NSURLResponse?, NSError?) -> Void'
我确实发现:
} catch _ {
有效,但对我有很多好处。
我是不是遗漏了什么或者我应该提交错误?
(这是Xcode 7b5)
dataTaskWithRequest
的完成处理程序不是为了抛出像 NSJSONSerialization
的 JSONObjectWithData
那样的错误,其签名是:
class func JSONObjectWithData(data: NSData, options opt: NSJSONReadingOptions) throws -> AnyObject
执行以下操作(与您尝试的相同):
catch _
但这不会向我们提供有关抛出错误的任何详细信息,即 class func JSONObjectWithData
.
因此,我们需要一种方法来消耗不可抛出的 dataTaskWithRequest
,同时保留抛出的 - JSONObjectWithData
.
我试过以下方法:
catch let error as NSError
{
//error specific to JSON serialization
NSLog("Error in JSON serialization \(error)")
}
catch
{
//exhaust the error
NSLog("Some error")
}