Swift:
Manejo de errores

Cómo hacerlo:

Swift utiliza el manejo de errores con los bloques do, try y catch. Echemos un vistazo:

enum FileError: Error {
    case fileDoesNotExist
    case noPermission
}

func readFile(atPath path: String) throws -> String {
    // Supongamos que tenemos aquí alguna lógica para comprobar si un archivo existe y si tenemos permiso para leerlo
    let fileExists = false
    let havePermission = true

    if !fileExists {
        throw FileError.fileDoesNotExist
    }

    if !havePermission {
        throw FileError.noPermission
    }

    return "El contenido del archivo va aquí"
}

do {
    let fileContent = try readFile(atPath: "/ruta/al/archivo")
    print(fileContent)
} catch FileError.fileDoesNotExist {
    print("¡Vaya! Archivo no encontrado.")
} catch FileError.noPermission {
    print("¡Ah! Sin permiso para leer el archivo.")
} catch {
    print("Ocurrió un error desconocido.")
}

Salida de muestra:

¡Vaya! Archivo no encontrado.

Profundizando

El manejo de errores no siempre fue tan fluido como lo es ahora. En Objective-C, lidiabas con punteros a objetos NSError, lo que parecía torpe. Ahora, tenemos un sistema más elegante con enumeraciones de Swift y el protocolo Error.

El throw de Swift nos permite señalar que algo salió mal. Los bloques do actúan como dominios conscientes de errores, try llama a los negocios arriesgados, y catch maneja las cosas si se van al sur.

Los opcionales son una alternativa para situaciones que no tienen un estatus de “error”, pero que aún podrían no tener “resultado”. Son un poco como las variables de Schrödinger: tienen un valor o no lo tienen.

Para una profundización real, consulta los tipos Result, que son híbridos elegantes entre patrones de retorno regular y de error.

También te puede interesar