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