La conversione tra i tipi in Objective-C
-
12-09-2019 - |
Domanda
Essendo una partenza sviluppatore Objective-C, e non avendo la pazienza di fare un po 'in realtà lo studio, piuttosto che tuffarsi in cose, mi sono imbattuto in quanto segue:
Ho un CGFloat, e voglio dividerlo per qualcosa, e utilizzare il risultato come un NSInteger.
Esempio:
CGPoint p = scrollView.contentOffset; //where p is a CGFloat by nature
NSInteger * myIndex = p.x/468.0;
Durante la compilazione, ottengo l'errore: "tipi incompatibili in inizializzazione". Direi che è a causa della mancata corrispondenza tra la CGFloat e NSInteger.
Che cosa devo sapere per uscire da questo? Ci scusiamo per ti dà fastidio.
Soluzione
Due problemi. Stai usando un puntatore NSInteger (NSInteger * MyIndex). E avrete bisogno di un cast per andare da float a int. In questo modo:
NSInteger myIndex = (int)(p.x / 468.0);
Altri suggerimenti
NSInteger non è un tipo di oggetto effettivo. È un typedef per un tipo intero primitivo. Rimuovere il * e il tuo esempio dovrebbe funzionare. Come è ora, si sta cercando di assegnare il risultato della vostra matematica come un puntatore e che stai ricevendo quel messaggio di errore.