Casting tipo Objective-C

La conversión de tipos es una forma de convertir una variable de un tipo de datos a otro tipo de datos. Por ejemplo, si desea almacenar un valor largo en un entero simple, puede escribir cast long a int. Puede convertir valores de un tipo a otro explícitamente utilizando elcast operator como sigue -

(type_name) expression

En Objective-C, generalmente usamos CGFloat para realizar operaciones de punto flotante, que se deriva del tipo básico de flotante en el caso de 32 bits y doble en el caso de 64 bits. Considere el siguiente ejemplo en el que el operador de conversión hace que la división de una variable entera por otra se realice como una operación de punto flotante:

#import <Foundation/Foundation.h>

int main() {
   int sum = 17, count = 5;
   CGFloat mean;

   mean = (CGFloat) sum / count;
   NSLog(@"Value of mean : %f\n", mean );

   return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

2013-09-11 01:35:40.047 demo[20634] Value of mean : 3.400000

Cabe señalar aquí que el operador de conversión tiene prioridad sobre la división, por lo que el valor de sum primero se convierte a tipo double y finalmente se divide por conteo dando un valor doble.

Las conversiones de tipos pueden ser implícitas y el compilador las realiza automáticamente o pueden especificarse explícitamente mediante el uso de cast operator. Se considera una buena práctica de programación utilizar el operador de conversión siempre que sea necesario realizar conversiones de tipo.

Promoción de enteros

La promoción de enteros es el proceso mediante el cual los valores de tipo entero "menores" que int o unsigned int se convierten en int o unsigned int. Considere un ejemplo de agregar un carácter en un int -

#import <Foundation/Foundation.h>

int main() {
   int  i = 17;
   char c = 'c';  /* ascii value is 99 */
   int sum;

   sum = i + c;
   NSLog(@"Value of sum : %d\n", sum );

   return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

2013-09-11 01:38:28.492 demo[980] Value of sum : 116

Aquí, el valor de la suma es 116 porque el compilador realiza una promoción de enteros y convierte el valor de 'c' en ascii antes de realizar la operación de suma real.

Conversión aritmética habitual

los usual arithmetic conversionsse realizan implícitamente para convertir sus valores en un tipo común. El compilador primero realiza la promoción de enteros , si los operandos aún tienen tipos diferentes, se convierten al tipo que aparece más alto en la siguiente jerarquía:

Las conversiones aritméticas habituales no se realizan para los operadores de asignación, ni para los operadores lógicos && y ||. Tomemos el siguiente ejemplo para entender el concepto:

#import <Foundation/Foundation.h>

int main() {
   int  i = 17;
   char c = 'c';  /* ascii value is 99 */
   CGFloat sum;

   sum = i + c;
   NSLog(@"Value of sum : %f\n", sum );
   return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

2013-09-11 01:41:39.192 demo[15351] Value of sum : 116.000000

Aquí, es simple entender que la primera c se convierte en un número entero, pero debido a que el valor final es flotante, se aplica la conversión aritmética habitual y el compilador convierte i y c en flotantes y los agrega, lo que produce un resultado flotante.