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

Jawaban:

269

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

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

luvieere
sumber
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
185

Cara Obj-C =):

NSString *inStr = [@(month) stringValue];
Alexey Kozhevnikov
sumber
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)
MadNik
sumber
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 .

Kevin
sumber
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,.

Karthik damodara
sumber
2

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

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

Anda juga dapat mencoba:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];
NeverHopeless
sumber
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];
Nazir
sumber
0

NSNumber mungkin baik untuk Anda dalam kasus ini.

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