2009-06-07 5 views
3

Être un démarrage développeur Objective-C, et ne pas avoir la patience de le faire réellement une étude, plutôt que de plonger dans les choses, je suis tombé sur les éléments suivants:Conversion entre les types en Objective-C

J'ai un CGFloat , et je veux le diviser par quelque chose, et utiliser le résultat comme un NSInteger.

Exemple:

CGPoint p = scrollView.contentOffset; //where p is a CGFloat by nature 
NSInteger * myIndex = p.x/468.0; 

Lors de la compilation, je reçois l'erreur: "Types incompatibles dans l'initialisation". Je suppose que c'est à cause de l'inadéquation entre le CGFloat et le NSInteger.

Que devrais-je savoir pour en sortir? Désolé de te déranger.

Répondre

7

Deux problèmes. Vous utilisez un pointeur NSInteger (NSInteger * myIndex). Et vous aurez besoin d'un casting pour passer de float à int. Comme ceci:

NSInteger myIndex = (int)(p.x/468.0); 
+0

Merci David! Toute cette partie du pointeur me fait encore un peu peur. Jusqu'à présent, j'ai pu l'éviter, mais je vais maintenant commencer à lire Kochan. –

+0

Je n'ai pas fait beaucoup d'Objective C, mais dans mon expérience limitée, vous n'avez pas besoin d'utiliser beaucoup de pointeurs de style C (en utilisant le * avec un type primitif comme int). Les objets Objective C sont gérés très bien. – David

4

NSInteger n'est pas un type d'objet réel. C'est un typedef pour un type entier primitif. Supprimez le * et votre exemple devrait fonctionner. Comme c'est le cas maintenant, vous essayez d'attribuer le résultat de votre calcul comme un pointeur et vous obtenez ce message d'erreur.

+0

J'ai eu des problèmes similaires en pensant que NSInteger était une sous-classe de NSNumber. Quelqu'un sait pourquoi sur Terre quelqu'un a créé le typedef NSInteger (en plus de faire des ravages, de la misère et de la confusion chez les débutants) ???? – cfischer