Bagaimana cara mengubah int ke NSString?


101

Saya ingin mengonversi menjadi inta NSStringdi Objective C.

Bagaimana saya bisa melakukan ini?

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;

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

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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.