Come posso convertire NSInteger in tipo di dati NSString?


137

Come si converte NSIntegerinNSString tipo di dati?

Ho provato quanto segue, dove mese è un NSInteger:

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

Risposte:


267

NSIntegers non sono oggetti, li casti long, al fine di abbinare la definizione delle architetture a 64 bit corrente:

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


11
Ci ho provato, ma ho continuato a ricevere un avviso Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Invece, secondo i documenti di Apple , sono andato conNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Nota che sui processori a 64 bit, come il nuovo chip A7, se l'app è compilata per 64 bit, un NSInteger è in realtà un lungo, non un int. Fare il cast, (int) mese sarebbe distruttivo su piattaforme a 64 bit per il caso generico. Se scegli come target esclusivamente le piattaforme Apple, preferisci il modo Objective-C come nella risposta di Aleksey Kozhevnikov, o qualcosa di simile che funzionerà sia con int che long - es. Long ;-) Un esempio, sebbene non firmato (che significa non negativo) è in Andreas La risposta di Ley.
Louis St-Amour,

1
@Steven Ho provato ad eliminare la risposta per avere quelle attuali, più applicabili, di superficie ed essere accettate, ma a quanto pare, le risposte accettate non possono essere eliminate. Ho quindi cercato di regolare almeno i suoi contenuti per fornire altrettante informazioni utili alle persone che cercano una soluzione rapida che non attivi avvisi.
Luvieere,

@luvieere La documentazione di Apple spiega chiaramente come trattare NSInteger nelle stringhe di formato. È necessario aggiornare la risposta per seguire questo consiglio.
Nikolai Ruhe,

2
[@(integerValue) stringValue]è un approccio più pulito.
Zorayr,


76

Modern Objective-C

An NSIntegerha il metodo stringValueche può essere utilizzato anche con un valore letterale

NSString *integerAsString1 = [@12 stringValue];

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

Molto semplice. No?

veloce

var integerAsString = String(integer)

8

%zdfunziona per NSIntegers ( %tuper NSUInteger) senza cast e senza avvisi su architetture a 32 e 64 bit. Non ho idea del perché questo non sia il " modo raccomandato ".

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

Se sei interessato al motivo per cui funziona, vedi questa domanda .


5

Modo semplice per fare:

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

Qui il @(value) convertiti la data NSIntegera un NSNumberoggetto per il quale è possibile chiamare la funzione desiderata, stringValue.


2

Durante la compilazione con supporto per arm64, questo non genererà un avviso:

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

1

Puoi anche provare:

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

0

La risposta è data ma pensa che per alcune situazioni questo sarà anche un modo interessante per ottenere la stringa da NSInteger

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

0

NSNumber potrebbe essere utile per te in questo caso.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.