Réponses:
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;
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);
@(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.
!) 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.
(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)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)est une expression encadrée , elle renvoie un NSNumber.
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.
NSString *strValue = @(myInt).stringValue;