swift2 如何在Swift 2.0中获得错误消息?

afdcj2ne  于 2022-11-23  发布在  Swift
关注(0)|答案(4)|浏览(370)

我在Swift 1.2中经常使用这种方法:NSURLConnection.sendSynchronousRequest(:_:_:_),但这在iOS9中显然是不赞成的。它仍然工作,但现在它使用新的Swift 2.0错误处理,我不知道我将如何获得错误消息,如果它失败,例如,如果时间用完。
我知道我必须把它放到一个做捕捉,然后说尝试之前的方法,但我不知道如何捕捉错误信息。

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

之前我用了NSError,然后用了它的description属性,但是现在我一点头绪都没有。

qzlgjiam

qzlgjiam1#

使用自动error变量,如果愿意,可以将其转换为NSError

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

inb24sb22#

现在可以抛出继承ErrorType的任何对象,并在catch语句中提供自定义处理。还可以将错误转换为NSError以访问localizedDescription来处理第三方错误。
转换枚举ErrorType将产生NSError,其中domain相等枚举名称、code相等枚举值,以及自动产生的localizedDescription,其格式如下:
无法完成该操作。(域错误代码。)
例如,下列程式码:

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。)

xoshrz7s

xoshrz7s3#

尽管问题标题指定了Swift 2,但此答案适用于Swift 3。
正如@redent84所指出的,从Swift 2开始,Error对象可能是一个自制的对象。下面是我编写的一个方法,用来分析和打印“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)
    }
mm5n2pyu

mm5n2pyu4#

如何获取userInfo中的错误消息

let errorMessage = (error as NSError).userInfo["message"] as? String

相关问题