Comment convertir int en NSString?

101

Je voudrais convertir un inten un NSStringen Objective C.

Comment puis-je faire ceci?

Yogini
la source

Réponses:

147

Les primitives peuvent être converties en objets avec @()expression. Ainsi , le plus court chemin est de transformer intpour NSNumberet ramasser la représentation de chaîne avec stringValueméthode:

NSString *strValue = [@(myInt) stringValue];

ou

NSString *strValue = @(myInt).stringValue;
Vision
la source
12
Légèrement moins verbeux:NSString *strValue = @(myInt).stringValue;
Distortum
@DielsonSales certains objets n'ont pas stringValue, mais tous ont description- donc comme une bonne pratique, il vaut mieux s'habituer à utiliser description( NSNumberfait, pas besoin de s'inquiéter ici). Essayez ceci ( descriptionimprimera la date, mais stringValueplantera):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.
1
@IslamQ. @(myInt)est une expression encadrée pour [NSNumber numberWithInt:]et elle retournera toujours un NSNumber lorsqu'on lui donne un int. [NSNumber stringValue]retournera toujours une NSString. Dans le code de votre commentaire, forcer le casting (id)et l'assigner à un type différent est une erreur de programmation évidente: vous ne devriez jamais faire cela. C'est comme balancer une méthode et ensuite argumenter sur le fait que cette méthode ne fait pas ce qu'elle faisait à l'origine.
Cœur le
1
@IslamQ. Essayez de convertir votre commentaire en Swift sans utiliser l'opérateur crash ( !) et vous comprendrez que vous l'avez fait de manière incorrecte dans Objective-C. Si l'objet testn'a pas été créé par vous, ce n'est pas votre responsabilité. Vous pouvez essayer d'appeler isKindOfClass:tous vos paramètres reçus, mais même cela peut être trompé (en passant une structure au lieu d'un NSObject par exemple). Alors ne le faites pas: documentez simplement explicitement les types attendus.
Cœur le
@ Cœur, bien sûr, lancer un objet (id)est une erreur, c'était juste pour démontrer le point sur lequel l'OMI descriptionest préférée stringValue(je me trompe peut-être, je n'ai pas programmé en ObjC depuis des années)
Islam Q.
144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Silfverstrom
la source
@Elist quand vous connaissez le type primitif, je me demande s'il peut y avoir un peu moins de surcharge en évitant le NSNumber intermédiaire de votre code? @(myInt)est une expression encadrée , elle renvoie un NSNumber.
Cœur le
37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

C'est l'une des nombreuses manières.

h4xxr
la source
2

Si cette chaîne est destinée à être présentée à l'utilisateur final, vous devez utiliser NSNumberFormatter. Cela ajoutera des milliers de séparateurs et respectera les paramètres de localisation de l'utilisateur:

NSInteger n = 10000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:@(n)];

Aux États-Unis, par exemple, cela créerait une chaîne 10,000, mais en Allemagne, ce serait le cas 10.000.

Rob
la source