Curso de Objective C: Switch y Manejo de excepciones

Switch

Esta sentencia nos va a permitir realizar una condicional múltiple respecto al valor de una variable, pongamos un ejemplo:

    int j=0;

    switch (j) {

        case 1:

            NSLog(@"La variable j vale 1");

            break;

        case 2:

            NSLog(@"La variable j vale 2");

            break;

        default:

            NSLog(@"La variable j no ha entrado en ninguno de los casos");

            break;

    }

En este caso estamos inicializando una variable entera j a 0. Y luego en el switch ponemos entre () la variable j. Esto significa que será la variable que evaluaremos para saber exactamente que valor tiene. Empezará a comprobar por el primer caso, que estamos comprobando si su valor es 1. Si es así ejecutará el bloque de código que hay justo después, incluyendo el break, Por lo tanto si su valor es 1 sacará un mensaje por consola y saldrá del switch, ya que el break funciona de una manera similar a los bucles. Con el segundo caso pasará lo mismo si j vale 2 entrará en el bloque de código del caso 2.

Con el default para algo parecido, si no ha encontrado el valor entre los anteriores casos, se ejecutará el bloque de código que haya después del default. En este caso sacando un mensaje por la consola, indicando que no ha encontrado el valor entre el resto de los casos.

Manejo de excepciones

Con el manejo de excepciones trataremos de gestionar un fallo crítico de la aplicación en el caso de que algo sea probable que pueda fallar. Para ello tendremos tres bloques principales de código:

Veamos un ejemplo de la sintaxis:

    @try {

        //Mundo de la piruleta donde cualquier cosa puede fallar

    }

    @catch (NSException \*exception) {

        // Mundo del cenizo, donde algo ha fallado

    }

    @finally {

        // Código que se ejecutará en cualquiera de los casos

    }

Esto sería una sentencia try-catch completa. Después de cada parte se incluye un bloque de código que va {}. En el catch como puede verse, tenemos una condición. En este caso es la excepción más genérica de todas, así que independientemente de qué excepción se de siempre se ejecutará esa parte del código.

Veamos un ejemplo más completo:

    NSArray \*coches = @\[@"Honda Civic",

                           @"Nissan Versa",

                           @"Ford F-150"\];

    int indiceSeleccion = 3;

    @try {

        //Mundo de la piruleta donde cualquier cosa puede fallar

        NSString \*coche = coches\[indiceSeleccion\];

        NSLog(@"The selected car is: %@", coche);

    }

    @catch (NSException \*exception) {

        // Mundo del cenizo, donde algo ha fallado

        NSLog(@"Tipo del fallo:%@",exception.name);

        NSLog(@"Causa:%@", exception.reason);

    }

    @finally {

        // Código que se ejecutará en cualquiera de los casos

        NSLog(@"En cualquiera de los casos!");

    }

En este caso tenemos un array de tres posiciones del 0 al 2 y dentro del try intentamos acceder a la cuarta posición, que no existe. en este caso nos sacará los siguientes mensajes por pantalla:

2014-03-15 11:48:53.904 03_estructuras_de_control_bucles[4442:303] Tipo del fallo:NSRangeException

2014-03-15 11:48:53.904 03_estructuras_de_control_bucles[4442:303] Algo ha fallado:*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]

2014-03-15 11:48:53.904 03_estructuras_de_control_bucles[4442:303] En cualquiera de los casos!

Como podemos ver nos salta una excepción del tipo NSRangeException, lógico porque nos hemos ido de rango con el índice del array. Con la propiedad reason, nos indica el porqué.

Referencias

Licencia Creative Commons

Este obra está bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.