within unreachable try thrown throwing occur functions example errors error catch calls because are ios swift error-handling try-catch swift2

ios - unreachable - ¿Cómo recibo el mensaje de error en Swift 2.0?



try catch swift 4 (3)

Utilicé mucho este método en Swift 1.2: NSURLConnection.sendSynchronousRequest(:_:_:_) pero aparentemente está en desuso en iOS9. Sin embargo, aún funciona, pero ahora usa el nuevo manejo de errores Swift 2.0 y no sé cómo obtendré el mensaje de error si falla, ej. si el tiempo se acaba

Sé que tengo que ponerlo en un do-catch y luego decir intentar antes del metho pero no sé cómo detectar el mensaje de error.

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

Antes usé NSError y luego su propiedad de descripción, pero ahora no tengo ni idea.


A pesar de que el título de la pregunta especifica Swift 2, esta respuesta es para Swift 3.

Como @ @ redent84 señala, ya que Swift 2, un objeto Error puede ser uno hecho en casa. Aquí hay un método que escribí para analizar e imprimir el objeto de error predeterminado disponible en una declaración de "captura" que no especifica ningún tipo de error específico:

// 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) }

Entonces puedes llamarlo así:

catch { printCaughtError(error) }


Ahora puede lanzar cualquier objeto que hereda ErrorType y proporcionar un manejo personalizado en la frase catch . También puede NSError el error a NSError para acceder a la NSError localizedDescription para manejar los errores de terceros.

La NSError un tipo de NSError producirá un NSError con el domain igual al nombre enum, el code igual al valor enum y una descripción localizedDescription generada automáticamente con el siguiente formato:

La operación no pudo ser completada. (DOMINIO error CODE.)

Por ejemplo, el siguiente código:

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

Imprimirá

La operación no pudo ser completada. (AwfulError error 1.)


Utilice la variable de error automático, y puede convertirla en NSError si lo desea:

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