Respuestas:
Los primitivos se pueden convertir en objetos con @()
expresión. Por lo que el más corto camino es transformar int
a NSNumber
y recoger representación de cadena con el stringValue
método:
NSString *strValue = [@(myInt) stringValue];
o
NSString *strValue = @(myInt).stringValue;
stringValue
, pero todos sí description
, por lo que, como buena práctica, es mejor acostumbrarse a usarlos description
( NSNumber
sí, no hay necesidad de preocuparse aquí). Prueba esto ( description
imprimirá la fecha, pero stringValue
fallará):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
@(myInt)
es una expresión en caja para [NSNumber numberWithInt:]
y siempre devolverá un NSNumber cuando se le dé un int. [NSNumber stringValue]
siempre devolverá un NSString. En el código de su comentario, forzar la transmisión (id)
y la asignación a un tipo diferente es un claro error de programación: nunca debe hacer eso. Es como mezclar un método y luego argumentar que ese método no está haciendo lo que estaba haciendo originalmente.
!
) y descubrirá que lo estaba haciendo mal en Objective-C. Si el objeto test
no fue creado por usted, entonces no es su responsabilidad. Puede intentar llamar isKindOfClass:
a todos sus parámetros recibidos, pero incluso eso puede ser engañado (pasando una estructura en lugar de un NSObject, por ejemplo). Así que no lo haga: simplemente documente explícitamente los tipos esperados.
(id)
es un error, fue solo para demostrar el punto en el que description
se prefiere a la OMI stringValue
(puedo estar equivocado, no he programado en ObjC durante años)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)
es una expresión en caja , devuelve un NSNumber.
Si esta cadena es para presentarla al usuario final, debe usar NSNumberFormatter
. Esto agregará miles de separadores y respetará la configuración de localización para el usuario:
NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];
En los EE. UU., Por ejemplo, eso crearía una cadena 10,000
, pero en Alemania, eso sería 10.000
.
NSString *strValue = @(myInt).stringValue;