Bagaimana cara mengonversi NSInteger ke NSString datatype?


138

Bagaimana seseorang mengonversi NSIntegerke NSStringtipe data?

Saya mencoba yang berikut ini, di mana bulan adalah NSInteger:

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

Jawaban:


269

NSIntegers bukanlah objek, Anda mentransmisikannya ke long, untuk mencocokkan definisi arsitektur 64-bit saat ini:

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


11
Saya mencoba ini, tetapi saya terus mendapat peringatan Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). Sebaliknya menurut dokumen Apple , saya pergi denganNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven

8
Perhatikan bahwa pada prosesor 64-bit, seperti chip A7 baru, jika aplikasi Anda dikompilasi untuk 64-bit, NSInteger sebenarnya adalah sebuah panjang, bukan int. Melakukan cast, (int) bulan akan merusak platform 64-bit untuk kasus umum. Jika menargetkan platform Apple secara eksklusif, lebih suka cara Objective-C seperti dalam jawaban Aleksey Kozhevnikov, atau sesuatu yang serupa yang akan bekerja dengan int dan long - misalnya long ;-) Contoh, meskipun unsigned (artinya non-negatif) ada di Andreas Jawaban Ley.
Louis St-Amour

1
@Steven Saya telah mencoba untuk menghapus jawaban agar jawaban yang terbaru, lebih berlaku, muncul dan diterima, tetapi ternyata, jawaban yang diterima tidak dapat dihapus. Oleh karena itu, saya mencoba untuk setidaknya menyesuaikan isinya untuk memberikan sebanyak mungkin informasi yang berguna bagi orang-orang yang mencari solusi cepat yang tidak memicu peringatan.
luvieere

Dokumentasi @luvieere Apple dengan jelas menjelaskan cara memperlakukan NSInteger dalam string format. Anda harus memperbarui jawaban Anda untuk mengikuti saran ini.
Nikolai Ruhe

2
[@(integerValue) stringValue]adalah pendekatan yang lebih bersih.
Zorayr


76

Modern Objective-C

An NSIntegermemiliki metode stringValueyang dapat digunakan bahkan dengan literal

NSString *integerAsString1 = [@12 stringValue];

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

Sangat sederhana. Bukan?

Cepat

var integerAsString = String(integer)

8

%zdberfungsi untuk NSIntegers ( %tuuntuk NSUInteger) tanpa cast dan peringatan pada arsitektur 32-bit dan 64-bit. Saya tidak tahu mengapa ini bukan " cara yang disarankan ".

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

Jika Anda tertarik dengan mengapa ini berhasil, lihat pertanyaan ini .


5

Cara mudah melakukannya:

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

Di sini, @(value)konversi yang diberikan NSIntegermenjadi NSNumberobjek yang Anda dapat memanggil fungsi yang diperlukan stringValue,.


2

Saat mengompilasi dengan dukungan untuk arm64, ini tidak akan menghasilkan peringatan:

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

2

Anda juga dapat mencoba:

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

0

Jawabannya diberikan tetapi pikirkan bahwa untuk beberapa situasi ini juga akan menjadi cara yang menarik untuk mendapatkan string dari NSInteger

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

0

NSNumber mungkin baik untuk Anda dalam kasus ini.

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