Comment convertir NSInteger en type de données NSString?


137

Comment se convertit-on NSIntegerau NSStringtype de données?

J'ai essayé ce qui suit, où le mois est un NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];

Réponses:


267

Les NSIntegers ne sont pas des objets, vous les castez longafin de correspondre à la définition actuelle des architectures 64 bits:

NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];


11
J'ai essayé cela, mais j'ai continué à recevoir un avertissement Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Au lieu de cela, selon les documents Apple , je suis allé avecNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Notez que sur les processeurs 64 bits, tels que la nouvelle puce A7, si votre application est compilée pour 64 bits, un NSInteger est en fait un long, pas un int. Faire le casting, (int) mois serait destructeur sur les plates-formes 64 bits pour le cas générique. Si vous ciblez exclusivement les plates-formes Apple, préférez la méthode Objective-C comme dans la réponse d'Aleksey Kozhevnikov, ou quelque chose de similaire qui fonctionnera à la fois avec int et long - par exemple long ;-) Un exemple, bien que non signé (ce qui signifie non négatif) est dans Andreas La réponse de Ley.
Louis St-Amour

1
@Steven J'ai essayé de supprimer la réponse afin que les réponses actuelles, plus applicables, apparaissent et soient acceptées, mais apparemment, les réponses acceptées ne peuvent pas être supprimées. J'ai donc essayé au moins d'ajuster son contenu afin de fournir autant d'informations utiles aux personnes à la recherche d'une solution rapide qui ne déclenche pas d'avertissements.
luvieere

@luvieere La documentation d'Apple explique clairement comment traiter NSInteger dans des chaînes de format. Vous devez mettre à jour votre réponse pour suivre ces conseils.
Nikolai Ruhe

2
[@(integerValue) stringValue]est une approche plus propre.
Zorayr


76

Objectif-C moderne

An NSIntegera la méthode stringValuequi peut être utilisée même avec un littéral

NSString *integerAsString1 = [@12 stringValue];

NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];

Très simple. N'est-ce pas?

Rapide

var integerAsString = String(integer)

8

%zdfonctionne pour NSIntegers ( %tupour NSUInteger) sans casts ni avertissements sur les architectures 32 bits et 64 bits. Je n'ai aucune idée pourquoi ce n'est pas la " voie recommandée ".

NSString *string = [NSString stringWithFormat:@"%zd", month];

Si vous souhaitez savoir pourquoi cela fonctionne, consultez cette question .


5

Façon simple de faire:

NSInteger value = x;
NSString *string = [@(value) stringValue];

Voici les @(value)convertit les données NSIntegerà un NSNumberobjet pour lequel vous pouvez appeler la fonction nécessaire, stringValue.


2

Lors de la compilation avec le support de arm64, cela ne générera pas d'avertissement:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];

2

Vous pouvez également essayer:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];

0

La réponse est donnée mais pensez que dans certaines situations, ce sera également un moyen intéressant d'obtenir une chaîne de NSInteger

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];

0

NSNumber peut être bon pour vous dans ce cas.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
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.