Bagaimana cara mengubah int ke NSString?

101

Saya ingin mengonversi menjadi inta NSStringdi Objective C.

Bagaimana saya bisa melakukan ini?

Yogini
sumber

Jawaban:

147

Primitif dapat diubah menjadi objek dengan @()ekspresi. Jadi terpendek cara adalah untuk mengubah intke NSNumberdan mengambil representasi string dengan stringValuemetode:

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

atau

NSString *strValue = @(myInt).stringValue;
Penglihatan
sumber
12
Sedikit lebih sedikit bertele-tele:NSString *strValue = @(myInt).stringValue;
Distortum
@DielsonSales beberapa objek tidak memiliki stringValue, tetapi semua memiliki description- jadi sebagai praktik yang baik, lebih baik membiasakan diri untuk menggunakan description( NSNumbertidak, tidak perlu khawatir di sini). Coba ini ( descriptionakan mencetak tanggal, tapi stringValueakan macet):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
Islam Q.
1
@Ilami. @(myInt)adalah ekspresi kotak untuk [NSNumber numberWithInt:]dan itu akan selalu mengembalikan NSNumber ketika diberi int. [NSNumber stringValue]akan selalu mengembalikan NSString. Dalam kode komentar Anda, memaksa casting dengan (id)dan menetapkan ke jenis yang berbeda adalah kesalahan pemrograman yang jelas: Anda tidak boleh melakukan itu. Ini seperti menipu metode dan kemudian membuat argumen tentang metode itu tidak melakukan apa yang awalnya dilakukan.
Cœur
1
@Ilami. Coba ubah komentar Anda ke Swift tanpa menggunakan operator crash ( !) dan Anda akan tahu bahwa Anda salah melakukannya di Objective-C. Jika objek testtersebut tidak dibuat oleh Anda, maka itu bukan tanggung jawab Anda. Anda dapat mencoba memanggil isKindOfClass:semua parameter yang Anda terima, tetapi bahkan itu bisa dibodohi (dengan meneruskan struct alih-alih NSObject misalnya). Jadi jangan lakukan itu: cukup dokumentasikan secara eksplisit jenis yang diharapkan.
Cœur
@ Cœur, tentu saja mentransmisikan objek ke (id)adalah sebuah kesalahan, itu hanya untuk mendemonstrasikan poin bahwa IMO descriptionlebih disukai daripada stringValue(saya mungkin salah, belum diprogram di ObjC selama bertahun-tahun)
Islam Q.
144
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
Silfverstrom
sumber
@Daftar ketika Anda mengetahui tipe primitif, saya ingin tahu apakah mungkin ada sedikit overhead yang kurang dengan menghindari NSNumber perantara dari kode Anda? @(myInt)adalah ekspresi kotak , ini mengembalikan NSNumber.
Cœur
37
int i = 25;
NSString *myString = [NSString stringWithFormat:@"%d",i];

Ini adalah salah satu dari banyak cara.

h4xxr
sumber
2

Jika string ini untuk presentasi kepada pengguna akhir, Anda harus menggunakan NSNumberFormatter. Ini akan menambahkan ribuan pemisah, dan akan menghormati pengaturan lokalisasi untuk pengguna:

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

Di AS, misalnya, itu akan membuat string 10,000, tetapi di Jerman, itu akan menjadi 10.000.

rampok
sumber