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:
  • Try: o el Mundo de la piruleta: donde todo el mundo es feliz y todo se ejecutará. Es como cerrar los ojos e imaginarnos que todo saldrá bien. Es decir que todo lo que pongamos dentro del try se intentará hacer, sea o no posible. Falle o no falle realizas en intento de ejecutarlo.
  • Catch: o el mundo del cenizo: este bloque de código se ejecutará si algo falla, mientras que se genere una excepción de código en tiempo de ejecución que cumpla con el tipo de datos que pongamos en la condición del catch. El tipo de excepción más genérico es el NSException.
  • Finnaly: De todas maneras… : Independientemente de si algo falla en el Try o no. Siempre se ejecutará el bloque de código que haya dentro del finally, si lo incluimos ya que esta parte de la sentencia es opcional. 

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