¿Cómo incremento un NSNumber?
es decir, myNSNumber ++
objective-c
TheLearner
fuente
fuente
NSNumber *
, compruebe siempre si los tipos primitivos son suficientes.Respuestas:
Actualización: FYI, personalmente me gustan más las respuestas de una línea de BoltClock y DarkDusts. Son más concisos y no requieren variables adicionales.
Para incrementar un
NSNumber
, tendrá que obtener su valor, incrementarlo y almacenarlo en una nuevaNSNumber
.Por ejemplo, para
NSNumber
mantener un número entero:O para
NSNumber
mantener un número de punto flotante:fuente
...
soporte? Esa es una referencia de pseudocódigo, ¿verdad? XCode no lo hace...
...
es solo un marcador de posición para cualquier número que desee.NSNumber
los objetos son inmutables; lo mejor que puede hacer es tomar el valor primitivo, incrementarlo y luego envolver el resultado en su propioNSNumber
objeto:fuente
Para cualquiera que esté usando la última versión de Xcode (escribiendo esto a partir de 4.4.1, SDK 5.1), con el uso de objetos literales, puede limpiar el código incluso un poco más ...
Sigue siendo un poco doloroso lidiar con el boxeo y desempaquetar todo para hacer operaciones simples, pero está mejorando, o al menos más corto.
fuente
NSNumbers son inmutables, debe crear una nueva instancia.
fuente
Ponlos todos juntos y tienes:
fuente
NSNumber
objetos son inmutables (?)Me gusta la expresión de puntos porque es más concisa y es por eso que IOS la admite en primer lugar:
fuente
Si lo está utilizando para almacenar un valor integral:
Para cosas de punto flotante, la respuesta corta es la siguiente, pero es una mala idea hacer esto, perderá precisión y si está haciendo algún tipo de comparación más adelante como [myNSNumber isEqual: @ (4.5)] puede que se sorprenda :
Si necesita hacer matemáticas con números de punto flotante representados como objetos en Objective-C (es decir, si necesita ponerlos en matrices, diccionarios, etc.), debe usar
NSDecimalNumber
.fuente
Utilice una categoría para facilitar el uso futuro. He aquí una idea básica.
fuente
Mucha buena información en las respuestas a esta pregunta. Usé la respuesta seleccionada en mi código y funcionó. Luego comencé a leer el resto de las publicaciones y simplifiqué mucho el código. Es un poco más difícil de leer si no está familiarizado con los cambios en la notación que se introdujeron en Xcode 5, pero es mucho más limpio. Probablemente podría hacer solo una línea, pero luego es un poco difícil averiguar qué estoy haciendo.
Estoy almacenando un NSNumber en un diccionario y quiero incrementarlo. Lo consigo, lo convierto en un int, lo incremento mientras lo convierto en un NSNumber, luego lo vuelvo a poner en el diccionario.
Código antiguo
Nuevo código
fuente