Menu
Coddy logo textTech

throws y Error

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy. Lección 44 de 56.

Swift maneja los errores haciendo que las funciones declaren que pueden fallar. El cuerpo de la función lanza un valor de error; el llamador debe manejarlo.

Un tipo de error es cualquier cosa que cumpla con el protocolo incorporado Error. La forma más sencilla de declarar el tuyo propio es con un enum:

enum InputError: Error {
    case empty
    case tooLong
}

Una función que lanza errores utiliza la palabra clave throws en su firma y la sentencia throw en su cuerpo:

func validate(_ s: String) throws -> String {
    if s.isEmpty { throw InputError.empty }
    if s.count > 100 { throw InputError.tooLong }
    return s
}

No puedes llamar directamente a una función que lanza errores, el compilador te obliga a manejar el error. La siguiente lección explica cómo.

challenge icon

Desafío

Fácil

Define un enum NumError: Error con dos casos: negative y tooBig.

Define una función que lanza errores doubleSafely(_ n: Int) throws -> Int que:

  • Lance .negative cuando n < 0
  • Lance .tooBig cuando n > 100
  • De lo contrario, devuelva n * 2

Lee un único entero desde stdin. Llama a doubleSafely dentro de un bloque do/catch (aprenderás la forma exacta en la próxima lección; por ahora usa este esqueleto exacto):

do {
    let result = try doubleSafely(n)
    print("ok: \(result)")
} catch NumError.negative {
    print("negative")
} catch NumError.tooBig {
    print("too big")
} catch {
    print("unknown")
}

Para la entrada 10 la salida es ok: 20. Para -1 es negative. Para 500 es too big.

Pruébalo tú mismo

let n = Int(readLine()!)!

// TODO: enum NumError: Error { case negative, tooBig }
// func doubleSafely(_ n: Int) throws -> Int { ... }
// do { let r = try doubleSafely(n); ... } catch NumError.negative { ... } ...
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Playground de Swift