intValue plutôt que total++ ?
Salut,
j'aurais aimé savoir pourquoi ici on utilise intValue :
si on voulait le total, on pourrait utiliser total++ ; , ici que fait intValue? le résultat final est un label qui change de numéro en fonction du "count" :
Merci
j'aurais aimé savoir pourquoi ici on utilise intValue :
si on voulait le total, on pourrait utiliser total++ ; , ici que fait intValue? le résultat final est un label qui change de numéro en fonction du "count" :
- (int)countOfClass:(Class)aClass<br />{<br /> int total = 0;<br /> for (id key in counts) {<br /> if ([key isKindOfClass:aClass]) {<br /> total += [[counts objectForKey:key] intValue];<br /> }<br /> }<br /> return total;<br />}
Merci

Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
NSNumber est un objet qui encapsule un nombre. En effet, Objective-C n'est pas un langage objet pur, et on ne peut donc pas stocker directement un nombre dans une collection (NSArray, NSDictionary, etc.). On ne peut pas non plus faire de calculs sur les NSNumbers, il faut donc les convertir en types non-objets. Ainsi, -[NSNumber intValue] donne la valeur de l'objet sous forme d'un type int.
P.S.: Message aux débutants: ce code n'est pas un exemple à suivre.
alors ici le intValue renvoie "1"? pour dire qu' "il existe"?
counts est bien nsMutable Dictionnary avec des nsnumbers.
Sinon, pourquoi ce code n'est pas un bon exemple à suivre?
il y a ce code dans une autre fonction qui me semble plus clair :
les deux sont équivalents en terme de syntaxe?
Merci
Par exemple, si [tt][counts objectForKey:xxx][/tt] renvoie un objet de type NSNumber, alors intValue renvoie la valeur entière contenue dans ce NSNumber. Si [tt][counts objectForKey:xxx][/tt] renvoie une NSStirng, cela va essayer d'interpréter cette chaà®ne comme un entier et te retourner le résultat.
Mais comme le dit Céroce, on a aucun contexte là avec ton code. C'est quoi "counts" ? Je suppose que c'est un NSDictionary (pour répondre à "objectForKey" il y a des chances), mais il vient d'où ? Il contient quoi au juste ? Il vient d'où ce code, il a été construit comment ce dictionnaire "counts" et il sort d'où ?
Bref un code comme ça sans contexte on peut pas deviner ce qu'est sensé représenter ton objet counts et à quoi il sert et dans quel contexte il est utilisé ou peuplé.
Si la personne qui a écrit ce code voulait que total contienne le nombre de clés qui sont de type aClass, oui il aurait écrit total++. Mais là il a voulu compter la somme des valeurs associés aux clés dont le type est aClass apparemment... Après à quoi lui sert ce dictionnaire "count" et qu'est ce qu'il y met dedans comme valeur, ça on peut pas savoir sans le contexte
alors voilà : j'ai plusieurs boutons avec comme titres des numéros et des strings, quand on clique dessus, ça incrémente la ligne "numéros" de +1, ou la ligne "strings" de +1. Ca le fait bien, mais je comprends pas : pourquoi on "ajoute" intValue à "total" , plutôt que de simplement faire un total++ par exemple. (EDIT: counts est un NSMutableDictionnary qui contient les numéros et les strings)
Voilà le code:
dans la view-controller : updateUI et collect (qui appelle le "collect" du modèle, voir tout en bas)
la fonction update ui pour actualiser les champs de texte :
dans le model : on appelle countOfClass avec totalNumberCount (appelé depuis la vue au-dessus), avec le fameux intValue :
et dans le model, la fonction collect (appelée depuis la view) :
Donc, je comprends pas : quand on appelle "countOfClass" (avant-dernier code), pourquoi ça nous donne "+1" dans le champ de texte, alors qu'on utilise "intValue", en rajoutant ce intValue à "total". Et par ailleurs, si "aClass" dans la fonction countOfClass est une string, on calcule quand même son "intValue"...
est-ce que vous comprenez mon problème?
Merci
Oui, ce code est rempli de bidouilles pour régler des cas particuliers qui n'existent que parce que l'auteur n'a pas réfléchi à la conception. Rien que l'utilisation de isKindOfClass: pour du fonctionnel en témoigne.
bon merci quand même...
La question n'est pas "pourquoi il utilise intValue plutôt que total++" mais "quels sont ces objets que je manipule et que représente chaque élément, pour comprendre pourquoi il fait ça" (et ça on ne peut pas t'aider si on ne connait pas le projet)
C'est comme si je te disais Va répondre à une question de genre... (et si le mec qui a écrit le code avait bien construit son code, il aurait de toute façon pas laissé "5" tout seul il aurait plutôt mis une constante)
Bon c'est pas grave si vous avez pas la réponse, mais ma question concernait le intValue et rien d'autre
a+
Je m'immisce, même si je n'ai lu qu'en diagonale...
Pourquoi utiliser intValue plutôt que ++?
Eh bin je t'offre une piste de réflexion:
- ++, opérateur d'incrémentation, incrémente ta variable de 1, qoi qu'il arrive
- intValue convertit ton objet en int. Donc, potentiellement, la valeur peut être 0, 1, 2,...