Comment incrémenter un NSNumber?
ie myNSNumber ++
objective-c
TheLearner
la source
la source
NSNumber *
, vérifiez toujours si les types primitifs suffiront.Réponses:
Mise à jour: FYI, j'aime personnellement mieux les réponses en une ligne de BoltClock et DarkDusts. Ils sont plus concis et ne nécessitent pas de variables supplémentaires.
Pour incrémenter un
NSNumber
, vous allez devoir obtenir sa valeur, l'incrémenter et le stocker dans un nouveauNSNumber
.Par exemple, pour un
NSNumber
tenant un entier:Ou pour
NSNumber
tenir un nombre à virgule flottante:la source
...
support? C'est une référence de pseudo-code, non? XCode does...
...
est juste un espace réservé pour n'importe quel nombre que vous voulez.NSNumber
les objets sont immuables; le mieux que vous puissiez faire est de saisir la valeur primitive, de l'incrémenter puis d'envelopper le résultat dans son propreNSNumber
objet:la source
Pour tous ceux qui utilisent la dernière version de Xcode (en écrivant ceci à partir de 4.4.1, SDK 5.1), avec l'utilisation de littéraux d'objet, vous pouvez nettoyer le code encore un peu plus ...
Encore un peu pénible de gérer la boxe et de tout déballer pour faire des opérations simples, mais ça va mieux, ou du moins plus court.
la source
Les NSNumbers sont immuables, vous devez créer une nouvelle instance.
la source
Mettez-les tous ensemble, et vous avez:
la source
NSNumber
objets sont immuables (?)J'aime l'expression dot car elle est plus concise et c'est pourquoi IOS la prend en charge en premier lieu:
la source
Si vous l'utilisez pour stocker une valeur intégrale:
Pour les trucs en virgule flottante, la réponse courte est la suivante, mais c'est une mauvaise idée de le faire, vous perdrez de la précision et si vous faites une sorte de comparaison plus tard comme [myNSNumber isEqual: @ (4.5)] vous pourriez être surpris :
Si vous avez besoin de faire des maths sur des nombres à virgule flottante représentés comme des objets en Objective-C (c'est-à-dire si vous devez les mettre dans des tableaux, des dictionnaires, etc.), vous devriez utiliser
NSDecimalNumber
.la source
Utilisez une catégorie pour faciliter l'utilisation future. Voici une idée de base.
la source
Beaucoup de bonnes informations dans les réponses à cette question. J'ai utilisé la réponse sélectionnée dans mon code et cela a fonctionné. Ensuite, j'ai commencé à lire le reste des articles et j'ai beaucoup simplifié le code. C'est un peu plus difficile à lire si vous n'êtes pas familier avec les changements de notation introduits dans Xcode 5, mais c'est beaucoup plus propre. Je pourrais probablement en faire juste une ligne, mais c'est un peu trop difficile de comprendre ce que je fais.
Je stocke un NSNumber dans un dictionnaire et je souhaite l'incrémenter. Je l'obtiens, le convertis en un entier, l'incrémente en le convertissant en NSNumber, puis le remets dans le dictionnaire.
Ancien code
Nouveau code
la source