Comment convertir int en NSString?


101

Je voudrais convertir un inten un NSStringen Objective C.

Comment puis-je faire ceci?

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;

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];

@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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.