我如何得到Swift 2.0中的错误信息?

我在Swift 1.2中使用了这个方法: NSURLConnection.sendSynchronousRequest(:_:_:_)但是在iOS9中显然不推荐使用。 它仍然有效,但现在它使用新的Swift 2.0error handling,我不知道如何得到错误信息,如果失败,例如。 如果时间用完。

我知道我必须把它变成一个do-catch,然后在方法之前说出来,但我不知道如何捕获错误信息。

 do { let data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil) return data } catch _ { return nil } 

之前我用NSError,然后是它的描述属性,但现在我不知道。

使用自动errorvariables,如果你愿意,你可以把它转换成NSError

 catch { let nsError = error as NSError print(nsError.localizedDescription) } 

您现在可以抛出任何inheritanceErrorType对象,并在catch语句中提供自定义处理。 您也可以将错误转换为NSError来访问localizedDescription来处理第三方错误。

投射一个枚举ErrorType将产生一个NSError ,其domain等于枚举名, code等于枚举值,自动生成localizedDescription ,格式如下:

操作无法完成。 (DOMAIN error CODE。)

例如,下面的代码:

 enum AwfulError: ErrorType { case Bad case Worse case Terrible } func throwingFunction() throws { throw AwfulError.Worse } do { try throwingFunction() } catch AwfulError.Bad { print("Bad error") } catch let error as NSError { print(error.localizedDescription) } 

将打印

操作无法完成。 (AwfulError错误1)

尽pipe问题标题指定了Swift 2,但这个答案适用于Swift 3。

正如@ redent84指出的那样,因为Swift 2中的一个Error对象可能是一个自制的。 下面是我写的一个方法,用来分析和打印缺省错误对象,这个错误对象在没有指定任何特定错误types的“catch”语句中可用:

  // Method to print an unknown Error type object to the system output. static func printCaughtError(_ unknownError : Error) { let objectDescription = String(describing: unknownError) let localizedDescription = unknownError.localizedDescription if localizedDescription != "" { if localizedDescription.contains(objectDescription) { print(localizedDescription) return } if !objectDescription.contains(localizedDescription) { print(objectDescription + ": " + localizedDescription) return } } print(objectDescription) } 

那么你可以这样调用它:

  catch { printCaughtError(error) }