Casting di tipo Objective-C
Il casting del tipo è un modo per convertire una variabile da un tipo di dati a un altro tipo di dati. Ad esempio, se desideri memorizzare un valore long in un numero intero semplice, puoi digitare cast long in int. È possibile convertire i valori da un tipo a un altro in modo esplicito utilizzando ilcast operator come segue -
(type_name) expression
In Objective-C, generalmente usiamo CGFloat per eseguire operazioni in virgola mobile, che deriva dal tipo base di float in caso di 32 bit e double in caso di 64 bit. Considera il seguente esempio in cui l'operatore cast fa sì che la divisione di una variabile intera per un'altra venga eseguita come operazione in virgola mobile:
#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;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
2013-09-11 01:35:40.047 demo[20634] Value of mean : 3.400000
Va notato qui che l'operatore cast ha la precedenza sulla divisione, quindi il valore di sum viene prima convertito in tipo double e infine viene diviso per conteggio ottenendo un valore doppio.
Le conversioni di tipo possono essere implicite e vengono eseguite automaticamente dal compilatore oppure possono essere specificate esplicitamente tramite l'uso di cast operator. È considerata una buona pratica di programmazione utilizzare l'operatore cast ogni volta che sono necessarie conversioni di tipo.
Promozione intera
La promozione di numeri interi è il processo mediante il quale i valori di tipo intero "minori" di int o unsigned int vengono convertiti in int o unsigned int. Considera un esempio di aggiunta di un carattere in 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;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
2013-09-11 01:38:28.492 demo[980] Value of sum : 116
Qui, il valore della somma arriva a 116 perché il compilatore sta facendo la promozione di interi e convertendo il valore di 'c' in ascii prima di eseguire l'effettiva operazione di addizione.
Conversione aritmetica usuale
Il usual arithmetic conversionsvengono implicitamente eseguiti per eseguire il cast dei loro valori in un tipo comune. Il compilatore esegue prima la promozione dei numeri interi , se gli operandi hanno ancora tipi diversi, vengono convertiti nel tipo che appare più in alto nella seguente gerarchia:
Le normali conversioni aritmetiche non vengono eseguite per gli operatori di assegnazione, né per gli operatori logici && e ||. Prendiamo il seguente esempio per comprendere il concetto:
#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;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
2013-09-11 01:41:39.192 demo[15351] Value of sum : 116.000000
Qui, è semplice capire che il primo c viene convertito in intero, ma poiché il valore finale è float, si applica la normale conversione aritmetica e il compilatore converte i e c in float e li aggiunge ottenendo un risultato float.