2010-04-14 10 views
2

J'essaie de renvoyer un double d'un autre objet puis de le stocker dans un nouveau double mais j'obtiens les types d'erreur incompatibles lors de l'initialisation. Qu'est-ce que j'oublie ici?- (double) un type de retour valide pour une méthode dans Objective C

double gradePoints = 0.0; 
double other = [aCourse getGradePoints]; 
gradePoints = gradePoints + other; 

Ceci est mon autre objet

- (double) getGradePoints{ 
    return 12.0; 
} 

Répondre

7

Vous avez probablement oublié d'ajouter la méthode getGradePoints à une déclaration d'interface: La méthode sera implicitement déclarée comme étant - (id) getGradePoints; résultant de l'avertissement que vous voyez.

+0

Cela semble être la seule explication raisonnable. –

2

est la référence à aCourse dactylographié ou est-il un id? Si je me souviens bien, si la classe de aCourse n'est pas connue du compilateur, elle suppose que le résultat de tous les appels de méthodes est le type id.

+0

Oui, il est tapé dans ma classe personnalisée Course * aCourse = [[Course alloc] init]; – aahrens

+0

Pas tout à fait. Si le compilateur ne connaît aucune méthode correspondant à la signature ('-getGradePoints' dans ce cas), il suppose que le type de retour est' id', et que tout argument soit 'id, ...' (ou juste '. .. », je ne m'en souviendrai jamais. La méthode est clairement manquante dans la déclaration d'interface de Course. –

0

La norme getter/setter kvo définit les getters sous la forme getPropertyName. Si vous avez une propriété appelée gradePoints, le compilateur interprétera getGradePoints comme getter pour cette propriété et si la propriété n'est pas définie comme un double, elle se plaindra.

définissant Même une variable locale comme ceci:

double gradePoints = 0.0; 
double other = [aCourse getGradePoints]; 

... peut confondre le compilateur car il peut essayer de traiter getGradePoints comme getter pour gradePoints. Objective-C s'appuie sur les conventions de nommage pour trouver des types spécifiques de méthodes car il ne peut pas supposer au moment de la compilation quelles méthodes un objet dans une circonstance particulière aura.

En général, évitez d'utiliser des noms de méthodes commençant par «get» et «set» car le compilateur veut les traiter comme des méthodes getter et setter pour les propriétés. Le potentiel de confusion du compilateur est élevé.

J'essaie d'utiliser des préfixes comme "fetch", "grab", "obtenir" etc au lieu de "get" juste pour être sûr.

+0

En fait, ne sont-ils pas définis simplement comme «-propertyName»? Ou les deux? –

+0

L'ancienne école "get" est toujours active. J'ai rencontré des problèmes dans Obj-C 2.0 en créant accidentellement une méthode 'getPropertyName' (non conçue comme getter) qui renvoyait un type différent de la propriété. Il est important de nommer vos méthodes avec attention dans Obj-C. – TechZen