Jawaban:
Primitif dapat diubah menjadi objek dengan @()
ekspresi. Jadi terpendek cara adalah untuk mengubah int
ke NSNumber
dan mengambil representasi string dengan stringValue
metode:
NSString *strValue = [@(myInt) stringValue];
atau
NSString *strValue = @(myInt).stringValue;
stringValue
, tetapi semua memiliki description
- jadi sebagai praktik yang baik, lebih baik membiasakan diri untuk menggunakan description
( NSNumber
tidak, tidak perlu khawatir di sini). Coba ini ( description
akan mencetak tanggal, tapi stringValue
akan macet):NSNumber *test = (id)[NSDate date]; NSLog(@"description: %@", test.description); NSLog(@"string value: %@", test.stringValue);
@(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.
!
) dan Anda akan tahu bahwa Anda salah melakukannya di Objective-C. Jika objek test
tersebut 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.
(id)
adalah sebuah kesalahan, itu hanya untuk mendemonstrasikan poin bahwa IMO description
lebih disukai daripada stringValue
(saya mungkin salah, belum diprogram di ObjC selama bertahun-tahun)
NSString *string = [NSString stringWithFormat:@"%d", theinteger];
@(myInt)
adalah ekspresi kotak , ini mengembalikan NSNumber.
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
.
NSString *strValue = @(myInt).stringValue;